diff --git a/Main.hs b/Main.hs
deleted file mode 100644
--- a/Main.hs
+++ /dev/null
@@ -1,3 +0,0 @@
-import qualified XSaiga.CGI as C
-
-main = C.main
diff --git a/XSaiga.cabal b/XSaiga.cabal
--- a/XSaiga.cabal
+++ b/XSaiga.cabal
@@ -1,47 +1,133 @@
--- Initial XSaiga.cabal generated by cabal init.  For further
--- documentation, see http://haskell.org/cabal/users-guide/
-
-name:                XSaiga
-version:             1.6.0.0
-synopsis:            An implementation of a polynomial-time top-down parser suitable for NLP
--- description:
-homepage:            http://speechweb2.cs.uwindsor.ca/solarman4/demo_sparql.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
-build-type:          Simple
-cabal-version:       >=1.8
---x-revision: 1
-
-description:
-		This package contains a Haskell implementation of the X-SAIGA project's parser combinators. The combinators
-		enable fully-general attribute grammars to be implemented as executable specifications. Although the parser
-		is top-down, and therefore highly modular, left-recursive productions are allowed and fully-general synthesized
-		and inherited attribute dependencies are also allowed. The parse tree, which is decorated with attribute values,
-		is built as a compact Tomita-style graph. Lazy evaluation enables attribute values to be evaluated only as needed.
-		Time and space complexity are both O(n^4) where n is the length of the input. An example natural-language interface (called Solarman)
-		to a semantic-web style RDF triplestore with approximately 3,000 facts about the solar system has been built
-		as an executable specification of an attribute grammar. Solarman is included in this archive.
-		Solarman computes answers to queries using an event-based denotational semantics which is based on Montague and Davidsonian semantics.
-		A web site [3] has been created so that readers can enter queries and find out more about Solarman.
-		.
-		\[1] <http://cs.uwindsor.ca/~richard/PUBLICATIONS/PADL_08.pdf>
-		.
-		\[2] <http://cs.uwindsor.ca/~richard/PUBLICATIONS/PADL_10.pdf>
-		.
-		\[3] <http://speechweb2.cs.uwindsor.ca/solarman4/demo_sparql.html>
-
-Library
-  build-depends: base >=4.6 && < 5, pretty, hsparql >=0.2, rdf4h, text, containers, network, bifunctors, mtl, bytestring, cgi
-  exposed-modules: XSaiga.Getts, XSaiga.AGParser2, XSaiga.TypeAg2, XSaiga.SolarmanTriplestore, XSaiga.Interactive, XSaiga.LocalData, XSaiga.CGI
-  other-modules: XSaiga.ShowText
-  extensions: OverloadedStrings,FlexibleInstances,NoMonomorphismRestriction
-
-Executable Solarman
-  main-is:Main.hs
-  other-modules:XSaiga.AGParser2 XSaiga.Getts XSaiga.LocalData XSaiga.SolarmanTriplestore XSaiga.TypeAg2 XSaiga.ShowText XSaiga.CGI
-  build-depends:  base >=4.6 && < 5, containers >=0.5, pretty >=1.1, cgi, rdf4h >=1.2, hsparql >=0.2, text >=0.11, network, bytestring, bifunctors, mtl
-  extensions: DoAndIfThenElse,FlexibleInstances,NoMonomorphismRestriction,OverloadedStrings
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.33.0.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: 61347fb5074eac8845401849a533232e56964b281c50e44215fa49e7f7d78102
+
+name:           XSaiga
+version:        1.7.0.0
+synopsis:       An implementation of a polynomial-time top-down parser suitable for NLP
+description:    This package contains a Haskell implementation of the X-SAIGA project's parser combinators. The combinators
+                enable fully-general attribute grammars to be implemented as executable specifications. Although the parser
+                is top-down, and therefore highly modular, left-recursive productions are allowed and fully-general synthesized
+                and inherited attribute dependencies are also allowed. The parse tree, which is decorated with attribute values,
+                is built as a compact Tomita-style graph. Lazy evaluation enables attribute values to be evaluated only as needed.
+                Time and space complexity are both O(n^4) where n is the length of the input. An example natural-language interface (called Solarman)
+                to a semantic-web style RDF triplestore with approximately 3,000 facts about the solar system has been built
+                as an executable specification of an attribute grammar. Solarman is included in this archive.
+                Solarman computes answers to queries using an event-based denotational semantics which is based on Montague and Davidsonian semantics.
+                A web site [3] has been created so that readers can enter queries and find out more about Solarman.
+                .
+                \[1] <http://cs.uwindsor.ca/~richard/PUBLICATIONS/PADL_08.pdf>
+                .
+                \[2] <http://cs.uwindsor.ca/~richard/PUBLICATIONS/PADL_10.pdf>
+                .
+                \[3] <http://speechweb2.cs.uwindsor.ca/solarman4/demo_sparql.html>
+category:       Parsing, Natural Language Processing, Memoization, Parser Combinators, Attribute Grammars, Text
+homepage:       http://speechweb2.cs.uwindsor.ca/solarman4/demo_sparql.html
+bug-reports:    https://github.com/InBetweenNames/Solarman/issues
+author:         Dr. Rahmatullah Hafiz, Dr. Richard Frost <rfrost@cogeco.ca>, Shane Peelar, Paul Callaghan, Eric Matthews
+maintainer:     Shane Peelar <peelar@uwindsor.ca>
+license:        BSD3
+license-file:   LICENSE
+build-type:     Simple
+
+source-repository head
+  type: git
+  location: https://github.com/InBetweenNames/Solarman
+
+flag asterius
+  description: Use when building for Asterius -- sets up hooks for querying triplestores via XMLHttpRequest
+  manual: True
+  default: False
+
+flag instore
+  description: Use built-in triplestore (no network access)
+  manual: True
+  default: False
+
+library
+  exposed-modules:
+      XSaiga.Getts
+      XSaiga.AGParser2
+      XSaiga.TypeAg2
+      XSaiga.SolarmanTriplestore
+      XSaiga.LocalData
+      XSaiga.CGI
+  other-modules:
+      XSaiga.ShowText
+      Paths_XSaiga
+  hs-source-dirs:
+      src
+  default-extensions: DoAndIfThenElse OverloadedStrings FlexibleInstances NoMonomorphismRestriction
+  build-depends:
+      aeson
+    , base >=4.6 && <5
+    , bifunctors
+    , bytestring
+    , cgi
+    , containers >=0.5
+    , data-constructors
+    , fastcgi
+    , generic-data
+    , hashable
+    , hsparql >=0.3.6
+    , mtl
+    , network
+    , pretty >=1.1
+    , random
+    , rdf4h >=1.2
+    , text >=0.11
+    , unordered-containers
+    , vector
+  if flag(instore)
+    cpp-options: -DINSTORE
+  else
+    build-depends:
+        network
+  if flag(asterius)
+    cpp-options: -DASTERIUS
+    build-depends:
+        asterius-prelude >=0.0.1
+  default-language: Haskell2010
+
+executable solarman.cgi
+  main-is: Main.hs
+  other-modules:
+      Paths_XSaiga
+  hs-source-dirs:
+      driver
+  default-extensions: DoAndIfThenElse OverloadedStrings FlexibleInstances NoMonomorphismRestriction
+  build-depends:
+      XSaiga
+    , aeson
+    , base >=4.6 && <5
+    , bifunctors
+    , bytestring
+    , cgi
+    , containers >=0.5
+    , data-constructors
+    , fastcgi
+    , generic-data
+    , hashable
+    , hsparql >=0.3.6
+    , mtl
+    , network
+    , pretty >=1.1
+    , random
+    , rdf4h >=1.2
+    , text >=0.11
+    , unordered-containers
+    , vector
+  if flag(instore)
+    cpp-options: -DINSTORE
+  else
+    build-depends:
+        network
+  if flag(asterius)
+    cpp-options: -DASTERIUS
+    build-depends:
+        asterius-prelude >=0.0.1
+  default-language: Haskell2010
diff --git a/XSaiga/AGParser2.hs b/XSaiga/AGParser2.hs
deleted file mode 100644
--- a/XSaiga/AGParser2.hs
+++ /dev/null
@@ -1,484 +0,0 @@
-{-# LANGUAGE Trustworthy #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE FlexibleContexts #-}
-
-module XSaiga.AGParser2 where
-import Prelude hiding ((*>))
-import Data.List
-import qualified Data.Text as T
-import XSaiga.TypeAg2
-import Control.Monad
-import Control.Applicative hiding ((<|>), (*>))
-import Control.Monad.State.Lazy
-
-
-
----- ************************************ -----------------------
-
-                
-data SorI     = S | I |NILL  deriving (Eq,Ord,Show, Enum) 
-                -- Synthesized or inherited or NILL
-
-type Instance = (SorI, Id) 
-                -- uniquely determines synthesized or inherited attribute for an NT
-                
-data Useless  = OF|ISEQUALTO  deriving (Show, Eq)
-                -- for decorating the semantic rules
-       
-type Atts     = [AttValue] -- [(AttType, AttValue)]
-
-type InsAttVals = [(Instance,Atts)]
-
-type Start    = ((Int,InsAttVals), [T.Text])
-
-type Context  = ([MemoL],[(Int,[(MemoL, Int)])])
-
---These are the same??
-type Start1   = (Int, InsAttVals)
-type End      = (Int, InsAttVals)
-
-data Tree = Leaf (MemoL,Instance)
-            | SubNode ((MemoL, Instance), (Start1,End))
-            | Branch [Tree] 
-              deriving (Eq)
-
-type Result   = [((Start1, End),[Tree])]
-
---Also called an "MTable" or "State" originally
-type MemoTable = [(MemoL ,[(Start1,(Context,Result))])] 
-
-type M = Start -> Context -> State MemoTable (Context, Result)
-
-type NTType  = Id -> InsAttVals -> M
-
-type SemRule = (Instance, (InsAttVals, Id) -> InsAttVals)
-
-type SeqType = Id -> InsAttVals -> [SemRule] -> Result -> M
-
-------------
-
-
---------------- ******************************************** ---------------------------
-
-(<|>) :: NTType -> NTType -> NTType
-(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 :: InsAttVals -> M
-empty atts (x,_) l = return (empty_cuts,[((x,(fst x,atts)), [Leaf (Emp, (NILL,O0))])])
-
-        
-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) (snd lRes) 
-                       return (fst lRes,lookUpRes)
-       Nothing
-           | funccount (snd context) inp name > (length dInput) - inp + 1
-               -> return (([name],[]),[])
-           | otherwise -> do let iC = ([],(addNT name inp $ snd context))
-                             (l,newRes) <- f id downAtts ((inp,dAtts),dInput) iC 
-                   -- let ((l,newRes),s1) = unMemoTable (f id downAtts (inp,dAtts) iC) s
-                             let l1          = makeContext (fst l) (findContext inp (snd context))
-                             s1             <- get
-                             let udtTab      = udt (l1,newRes) name (inp,downAtts) s1 
-                             let newFoundRes = addNode name (S, id) (inp,downAtts) newRes
-                             put udtTab
-                             return ( l1 ,newFoundRes)
-
-findWithFst key    = find ((== key) . fst)
-
-filterWithFst key  = filter ((== key) . fst)
-
-replaceSnd key def f list
-  = before ++ replaceFirst replacePoint
-  where
-    (before, replacePoint) = break ((== key) . fst) list
-    replaceFirst [] = [(key, def)]
-    replaceFirst ((a, b):nc) = (a, f b):nc                           
-
---TODO: Should this return all matches?  why return a list?
-findContext inp = maybe [] (:[]) . findWithFst inp
-
-funccount list inp name = maybe 0 id $ do
-  (_, funcp) <- findWithFst inp list
-  (_, fc)    <- findWithFst name funcp
-  return fc
-
-makeContext [] _          = empty_cuts
-makeContext rs []         = (rs, [])
-makeContext rs [(st,ncs)] = (rs, [(st, concatMap (flip filterWithFst ncs) rs)])
-
---Merged with incContext
-addNT name inp = replaceSnd inp [(name,1)] $ replaceSnd name 1 (+1)
-
-addNode name id (s',dA) [] = []  
-
-addNode name id (s',dA)  oldResult -- ((((s,newIh),(e,atts)),t):rs)  
- = let res     = packAmb oldResult
-       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) <- oldResult]
-
-packAmb [] = []
-packAmb [x] = [x]
-packAmb (x:y:ys) = if isEq x y then packAmb $ (packer x y):ys else x:packAmb (y:ys)
-  where
-  packer ((s1, e1), t1) ((s2, e2), t2) = ((s2, (fst e2, groupAtts (snd e1 ++ snd e2))), t1 ++ t2)
-  isEq (((s1,_),(e1,_)),_) (((s2,_),(e2,_)),_) = s1 == s2 && e1 == e2
-
-lookupT name inp context mTable
-  | null res_in_table = Nothing 
-  | otherwise          = checkUsability inp context (lookupRes inp (res_in_table !! 0)) 
-  where 
-    res_in_table = map snd $ filterWithFst name mTable
-
-lookupRes inp res_in_table = find (\((i,_), _) -> i == inp) res_in_table >>= return . snd
-
-checkUsability inp context res = res >>= (\x@((re,sc),res) -> if null re then Just x else checkUsability_ (findInp inp context) (findInp inp sc) x)
-  where
-  --Want Nothing to be the case if list is empty or the inp could not be found
-  findInp inp sc = findWithFst inp sc >>= (empty . snd)
-  empty [] = Nothing
-  empty x  = Just x
-  checkUsability_  _       Nothing scres   = Just scres -- if lc at j is empty then re-use
-  checkUsability_ Nothing  _       _       = Nothing         -- if cc at j is empty then don't re-use
-  checkUsability_ (Just ccs) (Just scs) scres  | and $ condCheck ccs scs = Just scres
-                                               | otherwise = Nothing
-  condCheck ccs scs = map (condCheck_ ccs) scs
-  condCheck_ ccs (n1, cs1) = maybe False (\(_, cs) -> cs >= cs1) $ findWithFst n1 ccs 
-
-{-nub (dA ++ dAtts)-}
---udt == "update table"?
-udt :: (Context, Result) -> MemoL -> Start1 -> MemoTable -> MemoTable
-udt res name (inp, dAtts) = replaceSnd name [((inp,dAtts),res)] (my_merge (inp,nub dAtts) res)
-
-replaceSndG key def list
-  = before ++ replaceFirst replacePoint
-  where
-    (before, replacePoint) = break ((== key) . fst . fst) list
-    replaceFirst [] = [def]
-    replaceFirst ((a, b):nc) = def:nc                           
-
-my_merge (inp,ndAtts) res = replaceSndG inp ((inp,ndAtts),res) 
-
-{-
-my_merge (inp,ndAtts) res [] = [((inp,ndAtts), res)]
-my_merge (inp,ndAtts) res (((i,dA), es):rest) 
-               |inp == i  = ((inp,ndAtts), res):rest 
-               |otherwise = ((i,dA), es): my_merge (inp,ndAtts) res rest 
--}
-
---------------- ************************* semantics of ATTRIBUTE GRAMMAR ************************* --------------------------
-
---                               atts          iatts      Context was "l"
-terminal :: T.Text -> Atts -> Id -> InsAttVals -> M
-terminal str semRules id _ ((i,a),inp) c  
- = (term str) ((i,[]),inp) c
-    where
-    inst = (S, id)
-    atts = [(inst,semRules)]
-    term :: T.Text -> M
-    term str ((r,a),dInp) _ 
-     |r - 1 == length dInp       = return (empty_cuts,[])
-     |dInp!!(r - 1) == str       = return (empty_cuts,[(((r,[]),(r+1,atts)),[Leaf (ALeaf str, inst)])])
-     |otherwise                  = return (empty_cuts,[])  
-
-
-nt :: NTType -> Id -> SeqType
-nt fx idx id inhAtts semRules altFromSibs 
- = let groupRule'' inst       = map snd $ filter ((inst ==) . fst) semRules
-       ownInheritedAtts       = mapInherited (groupRule'' (I, idx)) altFromSibs inhAtts id 
-   in fx idx ownInheritedAtts 
-
-parser :: SeqType -> [SemRule] -> Id -> InsAttVals -> M
-parser synRule semRules id inhAtts i c
- =      do
-           s <- get
-           let ((e,altFromSibs),d)     =
-                let sRule                        = groupRule'' (S, LHS) semRules
-                    ((l,newRes),st)              = runState ((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]
-   
-
-applySemantics vals id = concatMap (\rule -> rule (vals, id)) 
-
-mapInherited sems res [] id    
-  = concat [applySemantics (findAtts t) id sems | (((st,inAtts), (en,synAtts)),[t]) <- res]
-   
-mapInherited sems []  downAtts id    
-  = applySemantics downAtts id sems -- concat ( map (appSems id sems) (group downAtts))
-
-mapInherited sems res downAtts id    
-  = concat [applySemantics ((groupAtts downAtts) ++ synAtts ++ (findAtts t)) id sems 
-              | (((st,inAtts), (en,synAtts)),[t]) <- res]
-
-groupAtts []                    = []
-groupAtts [(a,b)]               = [(a,b)]
-groupAtts [(a,b),(_,b1)]       = [(a,b++b1)]
-groupAtts ((a,b):(_,b1):rest)  = (a,b++b1): groupAtts rest 
-
---------------------------------------
-findAtts (Branch ts)                  = concatMap findAtts ts
-findAtts (SubNode (_,((_,v'),(_,v)))) = v' ++ v
-findAtts (Leaf _)                     = [] 
-
---------------------------------------------------------
-
-
-rule_i          = rule I
-rule_s          = rule S
-
---TODO: more undefined...
-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 -> InsAttVals ->  Id -> Atts
-valOf ud typ o_f x  ivs x' | x == LHS   = getAttVals (ud , x') ivs typ
-                           | otherwise  = getAttVals (ud , x ) ivs typ
-
---TODO: Whoa!!!!  not cool! 
-getAttVals :: Instance -> InsAttVals -> (a -> AttValue) -> Atts
-getAttVals x ((i,v):ivs) typ =
- let 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 :: InsAttVals -> Id -> (InsAttVals -> Id -> AttValue) -> Int
-apply  y i x   = getAVAL (x y i)
-apply_ y i x   = getB_OP (x y i)
-
-apply__ :: InsAttVals -> Id -> (InsAttVals -> 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 "1" [MaxVal 1] <|> 
-    terminal "2" [MaxVal 2] <|>
-    terminal "3" [MaxVal 3] <|>  
-    terminal "4" [MaxVal 4] <|>  
-    terminal "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 "+" [B_OP (+)] <|> 
-    terminal "-" [B_OP (-)] <|>  
-    terminal "*" [B_OP (*)] <|>   
-    terminal "/" [B_OP (div)]    
-       )
- 
---The nastiest list comprehension I have ever seen in my life     
---The unformatted parse tree
-
-attsFinalAlt :: MemoL -> Int -> MemoTable -> [[[[Atts]]]]
-attsFinalAlt  key e t  =  [ [ [ map snd synAtts | ((_,(end,synAtts)), _)<-rs, end == e] | (_,(_,rs)) <- sr ] | (s,sr) <- t, s == key ]
-              
---The unformatted flattened parse trees
-formatAttsFinalAlt :: MemoL -> Int -> MemoTable -> Atts
-formatAttsFinalAlt key e t =  concat $ concat $ concat $ concat $ attsFinalAlt key e t
-
-                   
diff --git a/XSaiga/CGI.hs b/XSaiga/CGI.hs
deleted file mode 100644
--- a/XSaiga/CGI.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# LANGUAGE Trustworthy #-}
-{-# LANGUAGE DoAndIfThenElse #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module XSaiga.CGI where
-import qualified XSaiga.SolarmanTriplestore as App
-import Network.CGI
-import qualified Data.List as List
-import Data.Text as T
-import qualified Data.Text.Lazy as TL
-import qualified Data.ByteString.Lazy as BL
-import Data.Text.Encoding as E
---import qualified XSaiga.LocalData as Local
-import qualified XSaiga.Getts as Getts
-import qualified XSaiga.TypeAg2 as TypeAg2
-
---change between remoteData and localData
---dataStore = Local.localData
-dataStore = remoteData -- selects database
-
-endpoint_uri = "http://speechweb2.cs.uwindsor.ca/sparql"
-namespace_uri = T.pack "http://solarman.richard.myweb.cs.uwindsor.ca#"
-remoteData = Getts.SPARQL endpoint_uri namespace_uri
-
-cgiMain :: CGI CGIResult
-cgiMain = do
-    (Just input) <- getInputFPS "query"
-    out <- liftIO $ interpret' $ E.decodeUtf8 $ BL.toStrict input
-    setHeader "Content-type" "text/plain; charset=utf-8"
-    outputFPS $ BL.fromStrict $ E.encodeUtf8 $ out
-
-
-main :: IO ()
-main = runCGI (handleErrors cgiMain)
-
-interpret "ask them to be quiet" 
-     = "Hello. Quiet please. My "
-       `T.append` "masters are going to talk. Quiet please."
-
-interpret "introduce yourself solar man" 
-     =  "Hello. Hello. My name is Solar man."
-        `T.append` " Thank you for coming to my party."
-        `T.append` " I am very pleased to meet you."
-
-interpret "what can i say" 
-      = "You can say. hello there. what is your name."
-        `T.append` " you can ask me about the moons and the planets."
-    `T.append` " such as, who discovered a moon."
-    `T.append` " who discovered two moons."
-    `T.append` " which moons were discovered by kuiper."
-    `T.append` " who discovered phobos."
-    `T.append` " which planet is orbited by miranda."
-    `T.append` " how many moons orbit saturn."
-    `T.append` " and other similar questions."
-        `T.append` " who are you. where do you live."
-        `T.append` " tell me a joke. who made you." 
-        `T.append` " who do you know. what is your favorite band."
-        `T.append` " who is the vice president at the university of windsor." 
-        `T.append` " who is the president at the university of windsor." 
-        `T.append` " who is the dean of science at the university of windsor."
-
-interpret "hi"              = "Hi there. My name is solar man"
-interpret "hello"           = "hello. My name is solar man."
-interpret "hello there"     = "Good day to you"
-interpret "hello solar man" = "hello. How are you"
-interpret "goodbye"         = "goodbye. See you in the stars."
-interpret "goodbye solar man" = interpret "goodbye"
-interpret "fine thanks" = "Good, so am I. Except for a bit of back ache"
-interpret "thanks" = "you are welcome"
-interpret "thanks solar man" = "you are most welcome"
-interpret "yes please" = "yes please? What did you want? My memory is getting bad"
-interpret "what is your name" = "My name is solar man."
-interpret "who are you" 
-   = "My name is solar man. I know about the planets and the"
-     `T.append` " moons, and the people who discovered them"
-interpret "where do you live" 
-    = "I live in a dark cold computer. "
-       `T.append` "The center of my universe is Lambton Tower, at the University of Windsor."
-interpret "what do you know" 
-   = "Not much I am afraid. I am just beginning to learn. I know a bit about "
-     `T.append` "the planets, the moons, and the people who discovered them. "
-     `T.append` "My master will teach me some more when he gets another grant "
-interpret "how old are you"
-  = "older than you think. And much older than my friends Judy and Monty."
-interpret "who made you" 
-   = "I. B. M. and Opera Software made my ears and vocal chords. William Ma connected my "
-     `T.append` "ears to my brain, and Doctor Frost, master of the universe, made "
-     `T.append` "my brain"
-
-interpret "what is your favorite band"
-   = "Pink Floyd. I love, dark side of the moon"
-
-interpret "who is the vice president at the university of windsor" 
-  = "Leo Groarke"
-
-interpret "who is the president at the university of windsor" 
-  = "Doctor Alan Wildeman."
-
-interpret "who is the dean of science at the university of windsor"
-  = "Doctor Marlys Koschinsky"
-
-interpret "tell me a poem" = "do not know any poems. But my friend, Judy, does"
-
-
-interpret "know any poems" = "no but my friend, Judy does;"
-
-
-interpret "tell me a joke" 
-    = "did you hear about the Computer Scientist who thought his computer"
-      `T.append` "was a car. He had a hard drive home every day"
-
-interpret "know any jokes" 
-       = "just one. My friend Monty knows one too."
-
-interpret "who is judy" = "She is my friend. She knows about poetry"
-
-interpret "who is monty"   
-   = "Monty is my friend. He is a student"
-     `T.append` " at the university of Windsor."
-
-{-
-interpret "can I talk to judy" 
-              ="yes. here she is"
-                `T.append` "<goto>http://cs.uwindsor.ca/~speechweb/p_d_speechweb/judy/judy.xml</goto>"
-
-interpret "can I talk to monty" 
-              ="yes. here he is"
-                `T.append` "<goto>http://cs.uwindsor.ca/~speechweb/p_d_speechweb/monty/monty.xml</goto>"
-
-interpret "can I talk to solar man" 
-              ="yes. here he is"
-                `T.append` "<goto>http://cs.uwindsor.ca/~speechweb/p_d_speechweb/solarman/solarman.xml</goto>"
-
--}
-
-interpret "who do you know" = "i only know three people. Judy, Monty, and Solarman."
-
-interpret _ = "BLANKVALNOTUSED"
-
-interpret'' = TypeAg2.getQUVAL . List.head . App.parse
-
---TODO: multiple interpretations!  need to optimize these!
-interpret' input = do
-    let firstpass = interpret input
-    if firstpass == "BLANKVALNOTUSED" then do
-        let interpretations = List.map TypeAg2.getQUVAL $ App.parse input
-        outs <- mapM evaluate interpretations --TODO: this is a code smell -- needs to be abstracted -- looks like SemFunc
-        let formatted = T.concat $ List.intersperse " ; " outs
-        if T.null formatted then return "Do not know that one yet, will work on it tonight" else return $ formatted
-    else return firstpass
-
-evaluate (sem, getts) = do
-  rtriples <- TypeAg2.getReducedTriplestore remoteData (TypeAg2.flatOptimize $ TypeAg2.flattenGetts getts)
-  return $ sem rtriples
diff --git a/XSaiga/Getts.hs b/XSaiga/Getts.hs
deleted file mode 100644
--- a/XSaiga/Getts.hs
+++ /dev/null
@@ -1,244 +0,0 @@
-{-# LANGUAGE Trustworthy #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module XSaiga.Getts where
-import Data.List as List
-import Data.Text as T hiding (concat, map, zip, head)
-import Control.Monad
-import Debug.Trace
-
---For slow collect
-import qualified Data.Map.Strict as Map
-
---For endpoint query
-import Data.RDF hiding (triple, Triple)
-import Database.HSparql.Connection
-import Database.HSparql.QueryGenerator
-
---For caching name lookup
-import qualified Network.Socket as Net
-
-import qualified Data.Map as M
-import Data.IORef
-import System.IO.Unsafe
-
-addUri namespace_uri = (T.append namespace_uri)
-
-type Event = Text
-type Triple = (Event, Text, Text)
-type FDBR = [(Text,[Event])]
-
---getts returns all triples in the triple store that match the given parameters
-class TripleStore m where
-    getts_triples_entevprop_type :: m -> [Text] -> Text -> IO [Triple]
-    
-    getts_triples_entevprop :: m -> [Text] -> [Event] -> IO [Triple]
-   
-    getts_triples_members :: m -> Text -> IO [Triple]
-
-sortFirst = sortBy (\x y -> compare (fst x) (fst y))
-
---TODO: This is DANGEROUS.  Needs refactoring.
-make_fdbr_with_prop :: [Triple] -> Text -> FDBR
-make_fdbr_with_prop ev_data entity_type 
-  = collect $ map (\(x, _, z) -> (z, x)) $ List.filter (\(x, y, z) -> y == entity_type) ev_data
-
-getts_1 ev_data ("?", b, c) = [x | (x,y,z) <- ev_data, b == y, c == z]
-getts_2 ev_data (a, "?", c) = [y | (x,y,z) <- ev_data, a == x, c == z]
-getts_3 ev_data (a, b, "?") = [z | (x,y,z) <- ev_data, a == x, b == y]
-
---TODO: needs serious refactoring... divergence big time
-
---For the "In Program" triple store -- whole typeclass needs refactoring!
-instance TripleStore [Triple] where
-    getts_triples_entevprop_type ev_data propNames ev_type = do
-      let evs_with_type_ev_type = getts_1 ev_data ("?", "type", ev_type)
-      getts_triples_entevprop ev_data propNames evs_with_type_ev_type
-
-    getts_triples_entevprop ev_data propNames evs = do
-      return $ List.filter (\(ev, prop, _) -> ev `elem` evs && prop `elem` ("type":propNames)) ev_data
-    
-    getts_triples_members ev_data set = do
-      let evs_with_set_as_object = getts_1 ev_data ("?", "object", set)
-      let evs_with_type_membership = getts_1 ev_data ("?", "type", "membership")
-      let evs = intersect evs_with_set_as_object evs_with_type_membership
-      --TODO: abstract triple filtering mechanism for events and ev_types
-      let triples = [(x, y, z) | (x, y, z) <- ev_data, x `elem` evs]
-      return $ triples
-
---TODO: note, the pure versions do NOT need to include type information
-
-pure_getts_triples_entevprop_type ev_data propNames ev_type =
-  pure_getts_triples_entevprop ev_data propNames evs_with_type_ev_type
-  where
-    evs_with_type_ev_type = getts_1 ev_data ("?", "type", ev_type)
-
-pure_getts_triples_entevprop ev_data propNames evs
-  = List.filter (\(ev, prop, _) -> ev `elem` evs && prop `elem` propNames) ev_data
-
-pure_getts_members ev_data set = collect $ setRel
-  where
-    evs_with_set_as_object = getts_1 ev_data ("?", "object", set)
-    evs_with_type_membership = getts_1 ev_data ("?", "type", "membership")
-    evs = intersect evs_with_set_as_object evs_with_type_membership
-    setRel = [(z, x) | (x, y, z) <- ev_data, x `elem` evs, "subject" == y]
-
-
-data SPARQLBackend = SPARQL String Text deriving (Ord, Eq)
-
-endpointTable :: IORef (M.Map String String)
-{-# NOINLINE endpointTable #-}
-endpointTable = unsafeDupablePerformIO $ newIORef M.empty
-
-lookupEndpoint :: String -> IO String
-lookupEndpoint url = do
-  m <- readIORef endpointTable
-  case M.lookup (url) m of
-    Nothing -> Net.getAddrInfo Nothing (Just $ getServer url) (Just "http") >>=
-      \x -> (writeIORef endpointTable (M.insert url (newURL (showAddress x) (getURLPath url)) m) >> return (newURL (showAddress x) (getURLPath url)))
-    Just res -> return res
-  where
-  getServer = List.takeWhile (\x -> '/' /= x) . List.drop 7
-  showAddress = show . Net.addrAddress . head
-  getURLPath xs = List.drop (7 + (List.length $ getServer xs)) xs
-  newURL server path = "http://" ++ server ++ path
-
---the String in this instance is to be the endpoint that you wish to query
-instance TripleStore SPARQLBackend where
-    getts_triples_entevprop_type (SPARQL endpoint namespace_uri) propNames ev_type = do
-      resolvedEndpoint <- lookupEndpoint endpoint
-      m <- selectQuery resolvedEndpoint query
-      case m of
-        (Just res) -> return $ List.concatMap (\[x, y, z] -> [(removeUri namespace_uri $ deconstruct x, "type", ev_type), (removeUri namespace_uri $ deconstruct x, removeUri namespace_uri $ deconstruct y, removeUri namespace_uri $ deconstruct z)]) res
-        Nothing -> return []
-      where
-        query :: Query SelectQuery
-        query = do
-          sol <- prefix "sol" (iriRef namespace_uri)
-          ev <- var
-          prop <- var
-          ent <- var
-          triple ev prop ent
-          triple ev (sol .:. "type") (sol .:. ev_type)
-          filterExpr $ List.foldr1 (.||.) $ map ((prop .==.) . (sol .:. )) (propNames) --type required here as this is not an FDBR
-          selectVars [ev, prop, ent]
-
-    getts_triples_entevprop (SPARQL endpoint namespace_uri) propNames evs = do
-      resolvedEndpoint <- lookupEndpoint endpoint
-      m <- selectQuery resolvedEndpoint query
-      case m of
-        (Just res) -> return $ map (\[x, y, z] -> (removeUri namespace_uri $ deconstruct x, removeUri namespace_uri $ deconstruct y, removeUri namespace_uri $ deconstruct z)) res
-        Nothing -> return []
-      where
-        query :: Query SelectQuery
-        query = do
-          sol <- prefix "sol" (iriRef namespace_uri)
-          ev <- var
-          prop <- var
-          ent <- var
-          triple ev prop ent
-          filterExpr $ List.foldr1 (.||.) $ map ((ev .==.) . (sol .:. )) evs
-          filterExpr $ List.foldr1 (.||.) $ map ((prop .==.) . (sol .:. )) propNames
-          selectVars [ev, prop, ent]
-
-    getts_triples_members (SPARQL endpoint namespace_uri) set = do
-      resolvedEndpoint <- lookupEndpoint endpoint
-      m <- selectQuery resolvedEndpoint query
-      case m of
-        (Just res) -> return $ Prelude.concatMap (\[ev, ent] ->
-          [(removeUri namespace_uri $ deconstruct ev, "type", "membership"),
-          (removeUri namespace_uri $ deconstruct ev, "subject", removeUri namespace_uri $ deconstruct ent),
-          (removeUri namespace_uri $ deconstruct ev, "object", set)]) res
-        Nothing -> return []
-      where
-        query :: Query SelectQuery
-        query = do
-          sol <- prefix "sol" (iriRef namespace_uri)
-          ev <- var
-          ent <- var
-          triple ev (sol .:. "type") (sol .:. "membership")
-          triple ev (sol .:. "subject") ent
-          triple ev (sol .:. "object") (sol .:. set)
-          selectVars [ev, ent]
-
-    --Used to return FDBR directly
-    --Efficient implementation of getts_members for SPARQL backend
-    {-getts_members = getts_members'
-        where
-        getts_members' (SPARQL endpoint namespace_uri) set = do
-            resolvedEndpoint <- lookupEndpoint endpoint
-            m <- selectQuery resolvedEndpoint 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 "sol" (iriRef namespace_uri)
-                    ev <- var
-                    subj <- var
-                    triple ev (sol .:. "type") (sol .:. "membership")
-                    triple ev (sol .:. "subject") subj
-                    triple ev (sol .:. "object") (sol .:. set)
-                    orderNext subj
-                    distinct
-                    selectVars [subj, ev]
-    -}
-
-removeUri :: Text -> Text -> Text         
-removeUri namespace_uri = T.drop $ T.length namespace_uri
-                      
-preprocess :: Text -> IO [[BindingValue]] -> IO [Text]
-preprocess namespace_uri bvals = bvals >>= \x -> return $ map (removeUri namespace_uri . deconstruct) $ concat x
-
-
-deconstruct :: BindingValue -> Text
-deconstruct value = do
-    let (Bound node) = value
-    case node of
-        UNode strURI -> strURI
-        LNode (PlainL strLit) -> strLit
-
-
-{-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
-collect = Map.toList . Map.fromListWith (++) . map (\(x, y) -> (x, [y]))
-
---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)
-
-condense = map (\list -> (fst $ head list, map snd list)) . List.groupBy cmp
-  where
-  cmp x y = (fst x) == (fst y)
-
---alias for getts_fdbr_entevprop_type
---make_fdbr :: (TripleStore m) => m -> Text -> Text -> IO FDBR
---make_fdbr = getts_fdbr_entevprop_type 
-    
-    
diff --git a/XSaiga/Interactive.hs b/XSaiga/Interactive.hs
deleted file mode 100644
--- a/XSaiga/Interactive.hs
+++ /dev/null
@@ -1,413 +0,0 @@
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE OverloadedStrings #-}
-module XSaiga.Interactive where
-
-import XSaiga.SolarmanTriplestore
-import XSaiga.Getts
-import XSaiga.TypeAg2
-import XSaiga.CGI
-import Data.Functor
-import Data.Biapplicative
-import Control.Monad
-
-a $ b = a b
-infixr 0 $
-a . b = \x -> a (b (x))
-infixr 9 .
-
-discover = make_trans_active discover_rel
-discover' = make_trans_active' discover_rel
-discover'' = make_trans_active'' discover_rel
-discover_ = make_trans_passive discover_rel
-
-discovers = make_trans_active discover_rel
-discovers' = make_trans_active' discover_rel
-discovers'' = make_trans_active'' discover_rel
-discovers_ = make_trans_passive discover_rel
-
-discovered = make_trans_active discover_rel
-discovered' = make_trans_active' discover_rel
-discovered'' = make_trans_active'' discover_rel
-discovered_ = make_trans_passive discover_rel
-
-orbit = make_trans_active orbit_rel
-orbit' = make_trans_active' orbit_rel
-orbit'' = make_trans_active'' orbit_rel
-orbit_ = make_trans_passive orbit_rel
-
-orbits = make_trans_active orbit_rel
-orbits' = make_trans_active' orbit_rel
-orbits'' = make_trans_active'' orbit_rel
-orbits_ = make_trans_passive orbit_rel
-
-orbited = make_trans_active orbit_rel
-orbited' = make_trans_active' orbit_rel
-orbited'' = make_trans_active'' orbit_rel
-orbited_ = make_trans_passive orbit_rel
-
-use = make_trans_active use_rel
-use' = make_trans_active' use_rel
-use'' = make_trans_active'' use_rel
-use_ = make_trans_passive use_rel
-
-uses = make_trans_active use_rel
-uses' = make_trans_active' use_rel
-uses'' = make_trans_active'' use_rel
-uses_ = make_trans_passive use_rel
-
-used = make_trans_active use_rel
-used' = make_trans_active' use_rel
-used'' = make_trans_active'' use_rel
-used_ = make_trans_passive use_rel
-
-discoverer = get_subjs_of_event_type "discover_ev"
-discoverers = get_subjs_of_event_type "discover_ev"
-anyone = a <<*>> person
-anything = a <<*>> thing
-anybody = a <<*>> person
-someone = a <<*>> person
-something = a <<*>> thing
-somebody = a <<*>> person
-everyone = every <<*>> person
-everything = every <<*>> thing
-everybody = every <<*>> person
-telescopes = telescope
-places = place
-thing = get_members "thing"
-things = get_members "thing"
-planets = get_members "planet"
-planet = get_members "planet"
-person = get_members "person"
-sun = get_members "sun"
-moon = get_members "moon"
-moons = get_members "moon"
-satellite = get_members "moon"
-satellites = get_members "moon"
-atmospheric = get_members "atmospheric"
-blue = get_members "blue"
-solid = get_members "solid"
-brown = get_members "brown"
-gaseous = get_members "gaseous"
-green = get_members "green"
-red = get_members "red"
-ringed = get_members "ringed"
-vacuumous = get_members "vacuumous"
-exist = get_members "thing"
-exists = get_members "thing"
-spin = get_members "spin"
-spins = get_members "spin"
-bernard = make_pnoun "bernard"
-bond = make_pnoun "bond"
-venus = make_pnoun "venus"
-cassini = make_pnoun "cassini"
-dollfus = make_pnoun "dollfus"
-galileo = make_pnoun "galileo"
-hall = make_pnoun "hall"
-herschel = make_pnoun "herschel"
-huygens = make_pnoun "huygens"
-kowal = make_pnoun "kowal"
-kuiper = make_pnoun "kuiper"
-larsen = make_pnoun "larsen"
-lassell = make_pnoun "lassell"
-melotte = make_pnoun "melotte"
-nicholson = make_pnoun "nicholson"
-perrine = make_pnoun "perrine"
-pickering = make_pnoun "pickering"
-almathea = make_pnoun "almathea"
-ariel = make_pnoun "ariel"
-callisto = make_pnoun "callisto"
-charon = make_pnoun "charon"
-deimos = make_pnoun "deimos"
-dione = make_pnoun "dione"
-earth = make_pnoun "earth"
-enceladus = make_pnoun "enceladus"
-europa = make_pnoun "europa"
-ganymede = make_pnoun "ganymede"
-hyperion = make_pnoun "hyperion"
-iapetus = make_pnoun "iapetus"
-io = make_pnoun "io"
-janus = make_pnoun "janus"
-jupiter = make_pnoun "jupiter"
-jupitereighth = make_pnoun "jupitereighth"
-jupitereleventh = make_pnoun "jupitereleventh"
-jupiterfourteenth = make_pnoun "jupiterfourteenth"
-jupiterninth = make_pnoun "jupiterninth"
-jupiterseventh = make_pnoun "jupiterseventh"
-jupitersixth = make_pnoun "jupitersixth"
-jupitertenth = make_pnoun "jupitertenth"
-jupiterthirteenth = make_pnoun "jupiterthirteenth"
-jupitertwelfth = make_pnoun "jupitertwelfth"
-luna = make_pnoun "luna"
-mars = make_pnoun "mars"
-mercury = make_pnoun "mercury"
-mimas = make_pnoun "mimas"
-miranda = make_pnoun "miranda"
-neptune = make_pnoun "neptune"
-nereid = make_pnoun "nereid"
-oberon = make_pnoun "oberon"
-phobos = make_pnoun "phobos"
-phoebe = make_pnoun "phoebe"
-pluto = make_pnoun "pluto"
-rhea = make_pnoun "rhea"
-saturn = make_pnoun "saturn"
-saturnfirst = make_pnoun "saturnfirst"
-sol = make_pnoun "sol"
-tethys = make_pnoun "tethys"
-titan = make_pnoun "titan"
-titania = make_pnoun "titania"
-triton = make_pnoun "triton"
-umbriel = make_pnoun "umbriel"
-uranus = make_pnoun "uranus"
-human = get_members "person"
-humans = get_members "person"
-people = get_members "person"
-telescope = get_members "telescope"
-cassegrain_telescope = make_pnoun "cassegrain_telescope"
-hooker_telescope = make_pnoun "hooker_telescope"
-schmidt_telescope = make_pnoun "schmidt_telescope"
-subaru_reflector_telescope = make_pnoun "subaru_reflector_telescope"
-canada_france_hawaii_telescope = make_pnoun "canada-france-hawaii_telescope"
-aerial_telescope_1 = make_pnoun "aerial_telescope_1"
-bruce_astrograph = make_pnoun "bruce_astrograph"
-telescope_1 = make_pnoun "telescope_1"
-hale_telescope = make_pnoun "hale_telescope"
-hubble_space_telescope = make_pnoun "hubble_space_telescope"
-blanco_telescope = make_pnoun "blanco_telescope"
-crossley_reflector_telescope = make_pnoun "crossley_reflector_telescope"
-refractor_telescope_1 = make_pnoun "refractor_telescope_1"
-refractor_telescope_2 = make_pnoun "refractor_telescope_2"
-refractor_telescope_3 = make_pnoun "refractor_telescope_3"
-refractor_telescope_4 = make_pnoun "refractor_telescope_4"
-reflector_telescope_1 = make_pnoun "reflector_telescope_1"
-reflector_telescope_2 = make_pnoun "reflector_telescope_2"
-reflector_telescope_3 = make_pnoun "reflector_telescope_3"
-reflector_telescope_4 = make_pnoun "reflector_telescope_4"
-ground_based_telescope_1 = make_pnoun "ground_based_telescope_1"
-ground_based_telescope_2 = make_pnoun "ground_based_telescope_2"
-ground_based_telescope_3 = make_pnoun "ground_based_telescope_3"
-galilean_telescope_1 = make_pnoun "galilean_telescope_1"
-team = get_members "science_team"
-teams = get_members "science_team"
-voyager_science_team = make_pnoun "voyager_science_team"
-cassini_imaging_science_team = make_pnoun "cassini_imaging_science_team"
-science_team_1 = make_pnoun "science_team_1"
-science_team_2 = make_pnoun "science_team_2"
-science_team_3 = make_pnoun "science_team_3"
-science_team_4 = make_pnoun "science_team_4"
-science_team_5 = make_pnoun "science_team_5"
-science_team_6 = make_pnoun "science_team_6"
-science_team_7 = make_pnoun "science_team_7"
-science_team_8 = make_pnoun "science_team_8"
-science_team_9 = make_pnoun "science_team_9"
-science_team_10 = make_pnoun "science_team_10"
-science_team_11 = make_pnoun "science_team_11"
-science_team_12 = make_pnoun "science_team_12"
-science_team_13 = make_pnoun "science_team_13"
-science_team_14 = make_pnoun "science_team_14"
-science_team_15 = make_pnoun "science_team_15"
-science_team_16 = make_pnoun "science_team_16"
-science_team_17 = make_pnoun "science_team_17"
-science_team_18 = make_pnoun "science_team_18"
-science_team_19 = make_pnoun "science_team_19"
-science_team_20 = make_pnoun "science_team_20"
-science_team_21 = make_pnoun "science_team_21"
-larson = make_pnoun "larson"
-fountain = make_pnoun "fountain"
-scotti = make_pnoun "scotti"
-spahr = make_pnoun "spahr"
-mcmillan = make_pnoun "mcmillan"
-montani = make_pnoun "montani"
-gleason = make_pnoun "gleason"
-gehrels = make_pnoun "gehrels"
-roemer = make_pnoun "roemer"
-sheppard = make_pnoun "sheppard"
-jewitt = make_pnoun "jewitt"
-fernandez = make_pnoun "fernandez"
-magnier = make_pnoun "magnier"
-kleyna = make_pnoun "kleyna"
-gladman = make_pnoun "gladman"
-kavelaars = make_pnoun "kavelaars"
-petit = make_pnoun "petit"
-allen = make_pnoun "allen"
-laques = make_pnoun "laques"
-lecacheux = make_pnoun "lecacheux"
-smith = make_pnoun "smith"
-reitsema = make_pnoun "reitsema"
-pascu = make_pnoun "pascu"
-seidelmann = make_pnoun "seidelmann"
-baum = make_pnoun "baum"
-currie = make_pnoun "currie"
-showalter = make_pnoun "showalter"
-scholl = make_pnoun "scholl"
-holman = make_pnoun "holman"
-marsden = make_pnoun "marsden"
-burns = make_pnoun "burns"
-milisavljevic = make_pnoun "milisavljevic"
-grav = make_pnoun "grav"
-karkoschka = make_pnoun "karkoschka"
-lissauer = make_pnoun "lissauer"
-fraser = make_pnoun "fraser"
-christy = make_pnoun "christy"
-weaver = make_pnoun "weaver"
-stern = make_pnoun "stern"
-mutchler = make_pnoun "mutchler"
-steffl = make_pnoun "steffl"
-buie = make_pnoun "buie"
-merline = make_pnoun "merline"
-spencer = make_pnoun "spencer"
-young_e_f = make_pnoun "young_e_f"
-young_l_a = make_pnoun "young_l_a"
-hamilton = make_pnoun "hamilton"
-soummer = make_pnoun "soummer"
-throop = make_pnoun "throop"
-spacecraft = get_members "spacecraft"
-spacecrafts = get_members "spacecrafts"
-voyager_1 = make_pnoun "voyager_1"
-voyager_2 = make_pnoun "voyager_2"
-place = get_members "place"
-mt_hopkins = make_pnoun "mt_hopkins"
-fort_davis = make_pnoun "fort_davis"
-cerro_tololo = make_pnoun "cerro_tololo"
-us_naval_observatory = make_pnoun "us_naval_observatory"
-padua = make_pnoun "padua"
-mt_hamilton = make_pnoun "mt_hamilton"
-greenwich = make_pnoun "greenwich"
-mt_wilson = make_pnoun "mt_wilson"
-mt_palomar = make_pnoun "mt_palomar"
-kitt_peak = make_pnoun "kitt_peak"
-mauna_kea = make_pnoun "mauna_kea"
-slough = make_pnoun "slough"
-paris = make_pnoun "paris"
-the_hague = make_pnoun "the_hague"
-cambridge = make_pnoun "cambridge"
-liverpool = make_pnoun "liverpool"
-arequipa = make_pnoun "arequipa"
-pic_du_midi = make_pnoun "pic_du_midi"
-flagstaff = make_pnoun "flagstaff"
-la_silla = make_pnoun "la_silla"
-himalia = make_pnoun "himalia"
-elara = make_pnoun "elara"
-pasiphae = make_pnoun "pasiphae"
-sinope = make_pnoun "sinope"
-lysithea = make_pnoun "lysithea"
-carme = make_pnoun "carme"
-ananke = make_pnoun "ananke"
-leda = make_pnoun "leda"
-thebe = make_pnoun "thebe"
-adrastea = make_pnoun "adrastea"
-metis = make_pnoun "metis"
-callirrhoe = make_pnoun "callirrhoe"
-themisto = make_pnoun "themisto"
-megaclite = make_pnoun "megaclite"
-taygete = make_pnoun "taygete"
-chaldene = make_pnoun "chaldene"
-harpalyke = make_pnoun "harpalyke"
-kalyke = make_pnoun "kalyke"
-iocaste = make_pnoun "iocaste"
-erinome = make_pnoun "erinome"
-isonoe = make_pnoun "isonoe"
-praxidike = make_pnoun "praxidike"
-autonoe = make_pnoun "autonoe"
-thyone = make_pnoun "thyone"
-hermippe = make_pnoun "hermippe"
-aitne = make_pnoun "aitne"
-eurydome = make_pnoun "eurydome"
-euanthe = make_pnoun "euanthe"
-euporie = make_pnoun "euporie"
-orthosie = make_pnoun "orthosie"
-sponde = make_pnoun "sponde"
-kale = make_pnoun "kale"
-pasithee = make_pnoun "pasithee"
-hegemone = make_pnoun "hegemone"
-mneme = make_pnoun "mneme"
-aoede = make_pnoun "aoede"
-thelxinoe = make_pnoun "thelxinoe"
-arche = make_pnoun "arche"
-kallichore = make_pnoun "kallichore"
-helike = make_pnoun "helike"
-carpo = make_pnoun "carpo"
-eukelade = make_pnoun "eukelade"
-cyllene = make_pnoun "cyllene"
-kore = make_pnoun "kore"
-herse = make_pnoun "herse"
-epimetheus = make_pnoun "epimetheus"
-helene = make_pnoun "helene"
-telesto = make_pnoun "telesto"
-calypso = make_pnoun "calypso"
-atlas = make_pnoun "atlas"
-prometheus = make_pnoun "prometheus"
-pandora = make_pnoun "pandora"
-pan = make_pnoun "pan"
-ymir = make_pnoun "ymir"
-paaliaq = make_pnoun "paaliaq"
-tarvos = make_pnoun "tarvos"
-ijiraq = make_pnoun "ijiraq"
-suttungr = make_pnoun "suttungr"
-kiviuq = make_pnoun "kiviuq"
-mundilfari = make_pnoun "mundilfari"
-albiorix = make_pnoun "albiorix"
-skathi = make_pnoun "skathi"
-erriapus = make_pnoun "erriapus"
-siarnaq = make_pnoun "siarnaq"
-thrymr = make_pnoun "thrymr"
-narvi = make_pnoun "narvi"
-methone = make_pnoun "methone"
-pallene = make_pnoun "pallene"
-polydeuces = make_pnoun "polydeuces"
-daphnis = make_pnoun "daphnis"
-aegir = make_pnoun "aegir"
-bebhionn = make_pnoun "bebhionn"
-bergelmir = make_pnoun "bergelmir"
-bestla = make_pnoun "bestla"
-farbauti = make_pnoun "farbauti"
-fenrir = make_pnoun "fenrir"
-fornjot = make_pnoun "fornjot"
-hati = make_pnoun "hati"
-hyrrokkin = make_pnoun "hyrrokkin"
-kari = make_pnoun "kari"
-loge = make_pnoun "loge"
-skoll = make_pnoun "skoll"
-surtur = make_pnoun "surtur"
-anthe = make_pnoun "anthe"
-jarnsaxa = make_pnoun "jarnsaxa"
-greip = make_pnoun "greip"
-tarqeq = make_pnoun "tarqeq"
-aegaeon = make_pnoun "aegaeon"
-cordelia = make_pnoun "cordelia"
-ophelia = make_pnoun "ophelia"
-bianca = make_pnoun "bianca"
-cressida = make_pnoun "cressida"
-desdemona = make_pnoun "desdemona"
-juliet = make_pnoun "juliet"
-portia = make_pnoun "portia"
-rosalind = make_pnoun "rosalind"
-belinda = make_pnoun "belinda"
-puck = make_pnoun "puck"
-caliban = make_pnoun "caliban"
-sycorax = make_pnoun "sycorax"
-prospero = make_pnoun "prospero"
-setebos = make_pnoun "setebos"
-stephano = make_pnoun "stephano"
-trinculo = make_pnoun "trinculo"
-francisco = make_pnoun "francisco"
-margaret = make_pnoun "margaret"
-ferdinand = make_pnoun "ferdinand"
-perdita = make_pnoun "perdita"
-mab = make_pnoun "mab"
-cupid = make_pnoun "cupid"
-naiad = make_pnoun "naiad"
-thalassa = make_pnoun "thalassa"
-despina = make_pnoun "despina"
-galatea = make_pnoun "galatea"
-larissa = make_pnoun "larissa"
-proteus = make_pnoun "proteus"
-halimede = make_pnoun "halimede"
-psamathe = make_pnoun "psamathe"
-sao = make_pnoun "sao"
-laomedeia = make_pnoun "laomedeia"
-neso = make_pnoun "neso"
-nix = make_pnoun "nix"
-hydra = make_pnoun "hydra"
-kerberos = make_pnoun "kerberos"
-styx = make_pnoun "styx"
diff --git a/XSaiga/LocalData.hs b/XSaiga/LocalData.hs
deleted file mode 100644
--- a/XSaiga/LocalData.hs
+++ /dev/null
@@ -1,4138 +0,0 @@
-{-# LANGUAGE Safe #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module XSaiga.LocalData where
-
-import Data.Text
-
---Perhaps should use map...
-localData :: [(Text, Text, Text)]
-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")]
diff --git a/XSaiga/ShowText.hs b/XSaiga/ShowText.hs
deleted file mode 100644
--- a/XSaiga/ShowText.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-module XSaiga.ShowText where
-
-import Data.Text
-{-import Data.Text.Lazy (toStrict)
-import Data.Text.Lazy.Builder (toLazyText)
-import Data.Text.Lazy.Builder.Int (decimal)
-import Data.Text.Lazy.Builder.RealFloat (realFloat)
-
-class ShowText a where
-    tshow :: a -> Text
-
-instance ShowText Int where
-    tshow = toStrict . toLazyText . decimal
-
-instance ShowText Float where
-    tshow = toStrict . toLazyText . realFloat
-
-instance ShowText Text where
-    tshow = id
-
-
--} --TODO: when TH works on ARM, use text-show
-
-tshow :: (Show a) => a -> Text
-tshow = pack . show
diff --git a/XSaiga/SolarmanTriplestore.hs b/XSaiga/SolarmanTriplestore.hs
deleted file mode 100644
--- a/XSaiga/SolarmanTriplestore.hs
+++ /dev/null
@@ -1,1504 +0,0 @@
-{-# LANGUAGE NoMonomorphismRestriction #-}
-{-# LANGUAGE Trustworthy #-}
-{-# LANGUAGE OverloadedStrings #-}
-
-module XSaiga.SolarmanTriplestore where
-
-import Prelude hiding ((*>), words, unwords, concat, concatMap, null)
-import XSaiga.Getts
-import Data.List as List hiding (words, unwords)
-import qualified Data.Text as T
-import qualified Data.Set as Set
-import XSaiga.AGParser2
-import XSaiga.TypeAg2
-import Control.Monad
-import Debug.Trace
-import XSaiga.ShowText
-import Control.Monad.State.Lazy
-import Control.Applicative hiding ((*>), (<|>))
-import Data.Biapplicative
-import Data.Bifunctor
-import qualified Data.Map as Map
-
---copied from gangster_v4: utility functions for making lists unique
-subset s t = (s \\ t) == []
-
---TODO: MERGE IMAGES PROPER
-termor' :: (TF FDBR -> TF FDBR) -> (TF FDBR -> TF FDBR) -> TF FDBR -> TF FDBR
-termor' tmph1 tmph2 ents = union_fdbr' (tmph1 ents) (tmph2 ents)
-
---copied from gangster_v4: combinators
-termor :: SemFunc ((TF FDBR -> TF FDBR) -> (TF FDBR -> TF FDBR) -> TF FDBR -> TF FDBR)
-termor = bipure termor' (\g1 -> \g2 -> \g3 -> gettsUnion (gettsApply g1) (gettsApply g2))
-
-termand' :: (TF FDBR -> TF FDBR) -> (TF FDBR -> TF FDBR) -> TF FDBR -> TF FDBR
-termand' tmph1 tmph2 ents r = if not (List.null $ tmph1 ents r) && not (List.null $ tmph2 ents r) then termor' tmph1 tmph2 ents r else []
-
---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)
-termand = bipure termand' (\g1 -> \g2 -> \g3 -> gettsUnion (gettsApply g1) (gettsApply g2))
-
---TODO: FDBRs are sorted.  Use that to improve this.
-intersect_fdbr'' _ [] = []
-intersect_fdbr'' [] _ = []
-intersect_fdbr'' fdbr1@((e1, evs1):eei1)  fdbr2@((e2, evs2):eei2)
-  = case compare e1 e2 of
-      LT -> intersect_fdbr'' eei1 fdbr2
-      EQ -> (e2, evs2):(intersect_fdbr'' eei1 eei2) 
-      GT -> intersect_fdbr'' fdbr1 eei2
-
-{-intersect_fdbr'' eei1 eei2
-  = [(subj2, evs2) | (subj1, evs1) <- eei1, (subj2, evs2) <- eei2, subj1 == subj2]-}
-
-intersect_fdbr' :: TF FDBR -> TF FDBR -> TF FDBR
-intersect_fdbr' = liftA2 intersect_fdbr'' --intersect_fdbr'' <$> tf1 <*> tf2
-
-intersect_fdbr :: SemFunc (TF FDBR -> TF FDBR -> TF FDBR)
-intersect_fdbr = bipure intersect_fdbr' gettsIntersect
-
-union_fdbr'' :: FDBR -> FDBR -> FDBR
-union_fdbr'' fdbr1 fdbr2 = Map.toList $ Map.fromListWith (++) (fdbr1 ++ fdbr2)
-
-union_fdbr' :: TF FDBR -> TF FDBR -> TF FDBR
-union_fdbr' = liftA2 union_fdbr''
-
-union_fdbr :: SemFunc (TF FDBR -> TF FDBR -> TF FDBR)
-union_fdbr = bipure union_fdbr' gettsUnion
-
-nounand = intersect_fdbr
-
-that = nounand
-
---TODO: MERGE IMAGES PROPER (verify)
-
-nounor = union_fdbr
-
-{-a' nph vbph =
-    length (intersect  nph vbph) /= 0-}
-a = intersect_fdbr
-any' = a
-the = a
-some = a
-an = a
-
-every'' :: FDBR -> FDBR -> FDBR
-every'' nph vbph | subset (map fst nph) (map fst vbph) = intersect_fdbr'' nph vbph
-                | otherwise = []
-
-every' :: TF FDBR -> TF FDBR -> TF FDBR
-every' = liftA2 every''
-
-every :: SemFunc (TF FDBR -> TF FDBR -> TF FDBR)
-every = bipure every' gettsIntersect
-
-{- TODO:
-no' nph vbph =
-    length (intersect nph vbph) == 0
-no = liftM2 no'
--}
-
-{- TODO:
-none' nph vbph =
-    no nph vbph
-none = liftM2 none'
--}
-
-one'' :: FDBR -> FDBR -> FDBR
-one'' nph vbph   | length (res) == 1 = res
-                | otherwise = []
-    where
-      res = intersect_fdbr'' nph vbph
-
-one' :: TF FDBR -> TF FDBR -> TF FDBR
-one' = liftA2 one''
-
-one = bipure one' gettsIntersect
-
-two'' nph vbph   | length (res) == 2 = res
-                | otherwise = []
-    where
-      res = intersect_fdbr'' nph vbph
-
-two' = liftA2 two'' 
-
-two = bipure two' gettsIntersect
-
---which nph vbph = if result /= [] then result else "none."
---  where result = unwords $ intersect nph vbph
-
-which'' :: FDBR -> FDBR -> T.Text
-which'' nph vbph = if not $ T.null result then result else "none."
-  where
-  result = T.unwords $ map fst $ intersect_fdbr'' nph vbph
-
-which :: SemFunc (TF FDBR -> TF FDBR -> TF T.Text)
-which = bipure (liftA2 which'') gettsIntersect
-
-how_many'' nph vbph = tshow $ List.length (intersect_fdbr'' nph vbph)
-how_many = bipure (liftA2 how_many'') gettsIntersect
-
-who = which <<*>> (nounor <<*>> (get_members "person") <<*>> (get_members "science_team"))
-
---New
-what'' nph = if not $ T.null result then result else "nothing."
-    where result = T.unwords $ map fst nph
-
-what = bipure (liftA what'') id
-
---TODO: prepositions
-make_prep props = bipure (\tmph -> (props, tmph)) (gettsApply)
-
-make_prep_nph props = bipure (\nph -> (props, intersect_fdbr' nph)) (id)
-
---with :: (TF FDBR -> TF FDBR) -> ([T.Text], TF FDBR -> TF FDBR)
-with = make_prep ["with_implement"]
-
-by = make_prep ["subject"]
-
-at = make_prep ["location"]
-
-make_pnoun'' noun image = [(subj, evs) | (subj, evs) <- image, subj == noun]
-
-make_pnoun :: T.Text -> SemFunc (TF FDBR -> TF FDBR)
-make_pnoun noun = bipure (liftA $ make_pnoun'' noun) id
-
---TODO: ugly hack to work around parser problem
-make_year = make_pnoun . tshow
-
-in' = make_prep ["location", "year"]
-
---TODO: verify "subject" and identity here.  should not be introducing more info...
---to = bipure (\nph -> (["subject"], intersect_fdbr' nph)) (id)
-to = make_prep_nph ["subject"]
-
---New for new new semantics
-
---Strategy: collect all events, get all triples of those evs with prop
---use getts_fdbr_entevprop or similar to...
-
-{-make_prop_termphrase :: (TripleStore m) => m -> T.Text -> TF FDBR -> TF T.Text
-make_prop_termphrase ev_data prop nph = do
-  list <- nph
-  let evs = List.nub $ List.concatMap snd list
-  rtriples  <- getts_triples_entevprop ev_data [prop] evs
-  let finalList = T.unwords $ List.nub $ map (\(x,y,z) -> z) rtriples
-  return $ if not $ T.null finalList then finalList else "nothing."
--}
-
-make_prop_termphrase' :: T.Text -> TF FDBR -> TF T.Text
-make_prop_termphrase' prop nph triples = if not $ T.null finalList then finalList else "nothing."
-  where
-  evs = List.nub $ List.concatMap snd (nph triples)
-  rtriples = pure_getts_triples_entevprop triples [prop] evs
-  finalList = T.unwords $ List.nub $ map (\(x,y,z) -> z) rtriples
-
---TODO: attach info!
-make_prop_termphrase :: T.Text -> SemFunc (TF FDBR -> TF T.Text)
-make_prop_termphrase prop = make_prop_termphrase' prop >|< gettsAttachP prop
-
-where' = make_prop_termphrase "location"
-when' = make_prop_termphrase "year"
-how' = make_prop_termphrase "with_implement"
-
---needs special handling due to semantics requiring info from getts
-whatobj :: SemFunc (TF FDBR) -> SemFunc (TF T.Text)
-whatobj  (fdbr, getts) = make_prop_termphrase' (findFirstObj getts) fdbr >|< gettsAttachPO getts
-  where
-    findFirstObj (GettsIntersect _ y) = findFirstObj y
-    findFirstObj (GettsTP _ (_,_,object) _) = object
-    gettsAttachPO (GettsIntersect x y) = GettsIntersect x (gettsAttachPO y)
-    gettsAttachPO (GettsTP props (rel, subject, object) sub) = GettsTP (object:props) (rel, subject, object) sub
-
---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_trans_active "discover_ev"
-discovered = discover
-
-orbit = make_trans_active "orbit_ev"
-orbited = orbit-}
-
---For prepositional phrases
-{-discover' = make_trans_active "discover_ev"
-discovered' = discover'
-
-orbit' = make_trans_active "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_inverted_relation :: (TripleStore m) => m -> String -> (IO [String] -> IO Bool) -> IO [String]
-make_inverted_relation ev_data rel tmph = do
-        images <- make_fdbr 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], TF FDBR -> TF FDBR)] -> [Event] -> IO Bool
-filter_ev _ [] _ = return True
-filter_ev ev_data ((names,pred):list) evs = do
-    relevant_list <- mapM (\name -> getts_fdbr_entevprop 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 :: [([T.Text], TF FDBR -> TF FDBR)] -> [Event] -> TF [Event]
-filter_ev [] evs ev_data = evs
-filter_ev ((names,pred):list) evs triples
-  = if not $ List.null res then filter_ev list relevant_evs triples else []
-  where  
-  relevant_triples = List.filter (\(x, _, _) -> x `elem` evs) triples -- only get triples with our events
-  relevant_list = concatMap (\name -> make_fdbr_with_prop relevant_triples name) names 
-  res = pred (pure relevant_list) triples --TODO: prove correct
-  --NEW: Merge all events in predicate result for new query.  Result will be a subset of evs.
-  relevant_evs = List.nub $ concatMap snd res
-
-{-make_trans_active' :: (TripleStore m) => m -> String -> (IO [String] -> IO Bool) -> [([String], IO [String] -> IO Bool)] -> IO [String]
-make_trans_active' ev_data rel tmph preps = do
-    images <- make_fdbr 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-}
-
-{-prepProps :: [([T.Text], a)] -> [T.Text]
-prepProps = nub . concatMap fst-}
-
-{-gatherPreps :: [([T.Text], SemFunc (TF FDBR -> TF FDBR))] -> SemFunc [([T.Text], TF FDBR -> TF FDBR)]
-gatherPreps preps = peelGetts preps >|< attachProps preps
-  where
-    peelGetts = map (\(propNames, sf) -> (propNames, getSem sf)) 
-    extractGetts = foldr iunion GettsNone . map (\(propNames, sf) -> getGetts sf)
-    attachProps preps = GettsPreps (nub $ concatMap fst preps) `iunion` (extractGetts preps) --Will contain AttachP info [propNames] and whatever else was in SemFunc(->)
--}  
-
---Modified version of make_trans_active' to accomodate new filter_ev
-{-make_trans_active' :: (TripleStore m) => m -> T.Text -> [([T.Text], SemFunc (TF FDBR -> TF FDBR))] -> TF FDBR
-make_trans_active' ev_data rel preps = do
-  triples <- getts_triples_entevprop_type ev_data ("subject":(prepProps preps)) rel
-  let images = make_fdbr_with_prop triples "subject"
-  fdbrRelevantEvs <- mapM (\(subj, evs) -> filter_ev triples preps evs >>= (\x -> return (subj, x))) images
-  filterM (return . not . List.null . snd) fdbrRelevantEvs
--}
-
-data Voice = ActiveVoice | PassiveVoice
-getVoiceProps ActiveVoice (_, prop1, prop2) = (prop1, prop2)
-getVoiceProps PassiveVoice (_, prop1, prop2) = (prop2, prop1)
-
-gettsTP :: Voice -> Relation -> GettsTree -> GettsTree
-gettsTP voice rel (GettsPreps props' sub) = GettsTP (subject:props') rel sub
-  where
-    (subject,_) = getVoiceProps voice rel
-
-relname (a, _, _) = a
-
-make_trans'' :: Voice -> Relation -> [([T.Text], (TF FDBR -> TF FDBR))] -> TF FDBR
-make_trans'' voice rel preps rtriples = filter (not . List.null . snd) fdbrRelevantEvs
-  where
-    (subjectProp,_) = getVoiceProps voice rel
-    filtRTriples = pure_getts_triples_entevprop_type rtriples (subjectProp:(nub $ concatMap fst $ preps)) (relname rel)
-    images = make_fdbr_with_prop filtRTriples subjectProp
-    fdbrRelevantEvs = map (\(subj, evs) -> (subj, filter_ev preps evs rtriples)) images
-
---make_trans_active' "discover_ev" <<*>> (gatherPreps [at us_naval_observatory, in' 1877])
---TODO: rtriples is used directly?? is this correct?
---TODO: refactor to take into account active tmph
---TODO: refactor both passive and active into same function (active version may involve more)
-
---SCHEME
---empty denotes tmph
---' denotes preps
---'' denotes tmph followed by preps
-
-make_trans_active' :: Relation -> SemFunc ([([T.Text], (TF FDBR -> TF FDBR))] -> TF FDBR)
-make_trans_active' rel =  make_trans'' ActiveVoice rel >|< gettsTP ActiveVoice rel
-
---TODO: Bug in solarman3 semantics here with only "subject" in GettsTP
---make_trans_active :: T.Text -> SemFunc ((TF FDBR -> TF FDBR)  -> TF FDBR)
---make_trans_active ev_type = (\tmph_sem -> make_trans_active'' ev_type [(["object"], tmph_sem)]) >|< (\g -> GettsTP ["subject", "object"] ev_type [gettsApply g])
-
-make_trans_active :: Relation -> SemFunc ((TF FDBR -> TF FDBR) -> TF FDBR)
-make_trans_active rel = (\tmph_sem -> f [([object], tmph_sem)]) >|< (\getts -> g $ GettsPreps [object] [gettsApply getts])
-  where
-    (_, object) = getVoiceProps ActiveVoice rel
-    (f, g) = make_trans_active' rel
-
-make_trans_active'' :: Relation -> SemFunc ((TF FDBR -> TF FDBR) -> [([T.Text], (TF FDBR -> TF FDBR))] -> TF FDBR)
-make_trans_active'' rel = (\tmph_sem -> \preps -> f (([object], tmph_sem):preps)) >|< (\getts -> \preps -> g (addPrep object getts preps))
-  where
-    (subject, object) = getVoiceProps ActiveVoice rel
-    (f, g) = make_trans_active' rel
-    addPrep :: T.Text -> (GettsTree -> GettsTree) -> GettsTree -> GettsTree
-    addPrep prop getts (GettsPreps props subs) = GettsPreps (prop:props) ((gettsApply getts):subs)
-
-{-make_trans_passive' :: (TripleStore m) => m -> String -> [([String], IO [String] -> IO Bool)] -> IO [String]
-make_trans_passive' ev_data rel preps = do
-    images <- make_fdbr 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_trans_passive' to accomodate new filter_ev
-{-make_trans_passive' :: (TripleStore m) => m -> T.Text -> [([T.Text], SemFunc (TF FDBR -> TF FDBR))] -> TF FDBR
-make_trans_passive' ev_data rel preps = do
-    triples <- getts_triples_entevprop_type ev_data ("object":(prepProps preps)) rel
-    let images = make_fdbr_with_prop triples "object"
-    fdbrRelevantEvs <- mapM (\(subj, evs) -> filter_ev triples preps evs >>= (\x -> return (subj, x))) images
-    filterM (return . not . List.null . snd) fdbrRelevantEvs-}
-
-make_trans_passive :: Relation -> SemFunc ([([T.Text], (TF FDBR -> TF FDBR))] -> TF FDBR)
-make_trans_passive rel = make_trans'' PassiveVoice rel >|< gettsTP PassiveVoice rel
-
---Copied from old solarman:
-yesno' x = if x /= [] then "yes." else "no"
-yesno = bipure (liftA yesno') id
-
-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 []-}
-
---TODO: MERGE IMAGES PROPER (verify new impl)
-sand'' = union_fdbr''
-
-sand = bipure (liftA2 sand'') gettsUnion
-
---TODO: testing
-{-
-moon = get_members "moon"
-phobos = make_pnoun "phobos"
-hall = make_pnoun "hall"
-discover = make_trans_active "discover_ev"
-discover' = make_trans_active' "discover_ev"
-discover'' = make_trans_active'' "discover_ev"
-discover_ = make_trans_passive "discover_ev"
-telescope = get_members "telescope"
-person = get_members "person"
-planet = get_members "planet"
-discoverer = get_subjs_of_event_type "discover_ev"
-orbits = make_trans_active "orbit_ev"
-orbits' = make_trans_active' "orbit_ev"
-spins = get_members "spin"
--}
-
-{-
-||-----------------------------------------------------------------------------
-||  BASIC INTERPRETERS
-||-----------------------------------------------------------------------------
--}
-
-pnoun           =  memoize_terminals_from_dictionary Pnoun
-cnoun           =  memoize_terminals_from_dictionary Cnoun
-adj             =  memoize_terminals_from_dictionary Adj
-det             =  memoize_terminals_from_dictionary Det
-intransvb       =  memoize_terminals_from_dictionary Intransvb
-transvb         =  memoize_terminals_from_dictionary Transvb
-linkingvb       =  memoize_terminals_from_dictionary Linkingvb
-relpron         =  memoize_terminals_from_dictionary Relpron
-termphjoin      =  memoize_terminals_from_dictionary Termphjoin
-verbphjoin      =  memoize_terminals_from_dictionary Verbphjoin
-nounjoin        =  memoize_terminals_from_dictionary Nounjoin
-indefpron       =  memoize_terminals_from_dictionary Indefpron
-{-
-terminator      =  uninterpreted (SPECIAL_SYMBOL_TERM ".")
-                   $orelse
-                   uninterpreted (SPECIAL_SYMBOL_TERM "?")
-                   $orelse
-                   uninterpreted (SPECIAL_SYMBOL_TERM "\n")
--}
-sentjoin        =  memoize_terminals_from_dictionary Sentjoin
-quest1          =  memoize_terminals_from_dictionary Quest1
-quest2          =  memoize_terminals_from_dictionary Quest2
-quest3          =  memoize_terminals_from_dictionary Quest3
-quest4a         =  memoize_terminals_from_dictionary Quest4a
-quest4b         =  memoize_terminals_from_dictionary Quest4b
-quest5          =  memoize_terminals_from_dictionary Quest5
-quest6          =  memoize_terminals_from_dictionary Quest6
-
---NEW FOR PREPOSITIONAL PHRASES
-prep            =  memoize_terminals_from_dictionary Prepn
-prepnph         =  memoize_terminals_from_dictionary Prepnph
-year            =  memoize_terminals_from_dictionary Year
-
-memoize_terminals_from_dictionary key
-  = let key_words              = filter (\(_,type',_) -> type' == key) dictionary
-        list_of_terms          = map (\(a, _, z) -> terminal a z) key_words
-        altTerminals           = foldr1 (<|>) list_of_terms
-    in  memoize key altTerminals
-
-meaning_of p dInp key
- = let dInput     = T.words dInp
-       appParser  = runState (p T0 [] ((1,[]), dInput) ([],[])) []
-       upperBound = (List.length dInput) + 1
-   in  formFinal key upperBound (snd $ appParser)
-
-meaning_of_ p dInp key
- = let dInput     = T.words dInp
-       appParser  = runState (p T0 [] ((1,[]), dInput) ([],[])) []
-       upperBound = (List.length dInput) + 1
-   in  (snd $ appParser)
-
-formAtts key ePoint t
- = List.concat $ List.concat $ List.concat $ List.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
- = List.concat $ List.concat $ List.concat $ List.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 = runState (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]]
-     <|>
-     parser (nt prepnph S1 *> nt verbph S2)
-     [rule_s PREPPH_VAL OF LHS ISEQUALTO applyprepph_nph [synthesized PREPNPH_VAL OF S1,
-                                                         synthesized VERBPH_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]]
-    <|>
-      --(how|when|where|who) DID jointermph discover
-    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]]
-    <|> --whatobj case -- special because needs lookup in AST
-    parser (nt quest6 S1  *> nt quest1 S2  *>  nt sent S3 )
-    [rule_s QUEST_VAL  OF LHS ISEQUALTO ans6 [synthesized QUEST6_VAL  OF  S1,
-                                              synthesized QUEST1_VAL OF S2,
-                                              synthesized SENT_VAL    OF  S3]]
-    <|>
-    {-parser (nt quest7 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]]
-    <|>-}
-      --(whatsubj|who|how|when|where) [WAS] [tmph] discovered ...
-    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 quest7 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 (intersect_fdbr <<*>> (getAtts getAVALS atts x) <<*>> (getAtts getAVALS atts y))
-
-intrsct2         [x, y]
- = \atts -> ADJ_VAL (intersect_fdbr <<*>> (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_trans_active.  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_trans_active 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_trans_active' reln <<*>> gatherPreps ((make_prep [object] <<*>> predicate) : preps)
-    where
-    reln = getAtts getBR atts x
-    predicate = getAtts getTVAL atts y
-    preps = getAtts getPREPVAL atts z
-    (_, object) = getVoiceProps ActiveVoice reln
-
-applytransvbprep [x,y] atts = VERBPH_VAL $ make_trans_active' reln <<*>> gatherPreps [make_prep [object] <<*>> predicate]
-    where
-    reln = getAtts getBR atts x
-    predicate = getAtts getTVAL atts y
-    (_, object) = getVoiceProps ActiveVoice reln
-
-applytransvb_no_tmph [x,y] atts = VERBPH_VAL $ make_trans_active' reln <<*>> gatherPreps preps
-    where
-    reln = getAtts getBR atts x
-    preps = getAtts getPREPVAL atts y
-
-applytransvb_no_tmph [x] atts = VERBPH_VAL $ make_trans_active' reln <<*>> gatherPreps []
-    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_trans_passive reln <<*>> gatherPreps 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
-            make_prep prep_names <<*>> termph
-
-applyprepph_nph [x, y]
- = \atts -> PREPPH_VAL $
-        let prep_names = getAtts getPREPNPHVAL atts x
-            nph = getAtts getAVALS atts y in
-            make_prep_nph prep_names <<*>> nph
-
-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 $ tshow $ 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_trans_passive reln <<*>> gatherPreps preps
-        where
-        reln = getAtts getBR atts x
-        preps = case xs of
-                  [] -> []
-                  (p:_) -> 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))
-
-ans6             [x, y, z]
- = \atts -> QUEST_VAL ((getAtts getQU6VAL atts x) (getAtts getSV atts z))
-
-
-
-truefalse        [x]
-  = \atts -> QUEST_VAL $ fmap (\fdbr -> if not (List.null fdbr) then "true." else "false.") `first` (getAtts getSV atts x)
-
-{-
-||-----------------------------------------------------------------------------
-|| 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_trans_active
-
-{- 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> = whatobj;
-
-<Intransvb> = exist | exists | spin | spins;
-
--}
-
-discover_rel = ("discover_ev","subject","object")
-orbit_rel = ("orbit_ev", "subject", "object")
-use_rel = ("discover_ev", "subject", "with_implement")
-
-dictionary :: [(T.Text, MemoL, [AttValue])]
-dictionary = [
-    ("thing",              Cnoun,     [NOUNCLA_VAL $ get_members "thing"]),
-    ("things",             Cnoun,     [NOUNCLA_VAL $ get_members "thing"]),
-    ("planets",            Cnoun,     [NOUNCLA_VAL $ get_members "planet"]),
-    ("planet",             Cnoun,     [NOUNCLA_VAL $ get_members "planet"]),
-    ("person",             Cnoun,     [NOUNCLA_VAL $ get_members "person"]),
-    ("sun",                Cnoun,     [NOUNCLA_VAL $ get_members "sun"]),
-    ("moon",               Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
-    ("moons",              Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
-    ("satellite",          Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
-    ("satellites",         Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
-    ("atmospheric",        Adj,       [ADJ_VAL $ get_members "atmospheric"]),
-    ("blue",               Adj,       [ADJ_VAL $ get_members "blue"]),
-    ("solid",              Adj,       [ADJ_VAL $ get_members "solid"]),
-    ("brown",              Adj,       [ADJ_VAL $ get_members "brown"]),
-    ("gaseous",            Adj,       [ADJ_VAL $ get_members "gaseous"]),
-    ("green",              Adj,       [ADJ_VAL $ get_members "green"]),
-    ("red",                Adj,       [ADJ_VAL $ get_members "red"]),
-    ("ringed",             Adj,       [ADJ_VAL $ get_members "ringed"]),
-    ("vacuumous",          Adj,       [ADJ_VAL $ get_members "vacuumous"]),
-    ("exist",              Intransvb, [VERBPH_VAL $ get_members "thing"]),
-    ("exists",             Intransvb, [VERBPH_VAL $ get_members "thing"]),
-    ("spin",               Intransvb, [VERBPH_VAL $ get_members "spin"]),
-    ("spins",              Intransvb, [VERBPH_VAL $ get_members "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_rel]),
-    ("discovers",          Transvb,   [VERB_VAL discover_rel]),
-    ("discovered",         Transvb,   [VERB_VAL discover_rel]),
-    ("orbit",              Transvb,   [VERB_VAL orbit_rel]),
-    ("orbited",            Transvb,   [VERB_VAL orbit_rel]),
-    ("orbits",             Transvb,   [VERB_VAL orbit_rel]),
-    ("use",                Transvb,   [VERB_VAL use_rel]),
-    ("used",               Transvb,   [VERB_VAL use_rel]),
-    ("uses",               Transvb,   [VERB_VAL use_rel]),
-    ("is",                 Linkingvb, [LINKINGVB_VAL $ bipure (liftA id) id]),
-    ("was",                Linkingvb, [LINKINGVB_VAL $ bipure (liftA id) id]),
-    ("are",                Linkingvb, [LINKINGVB_VAL $ bipure (liftA id) id]),
-    ("were",               Linkingvb, [LINKINGVB_VAL $ bipure (liftA id) 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]),
-    --AMBIGUOUS: how was phobos discovered ("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]), 
-    ("what",               Quest6,    [QUEST6_VAL     $ whatobj]),
-    ("who",                Quest5,    [QUEST2_VAL     $ who]),
-    ("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 "discover_ev"]),
-    ("discoverers", Cnoun,            [NOUNCLA_VAL $ get_subjs_of_event_type "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 "orbit_ev"]),
-    --("orbits",      Intransvb,        [VERBPH_VAL $ get_subjs_of_event_type "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"]]),
-    ("using",       Prepn, [PREPN_VAL ["with_implement"]]),
-    ("in",          Prepn, [PREPN_VAL ["location","year"]]),
-    ("at",          Prepn, [PREPN_VAL ["location"]]),
-    ("by",          Prepn, [PREPN_VAL ["subject"]]),
-    ("to",          Prepnph, [PREPNPH_VAL ["subject"]]),
-    --Begin telescope stuff--
-    ("telescope",   Cnoun, [NOUNCLA_VAL $ get_members "telescope"]),
-    ("telescopes",  Cnoun, [NOUNCLA_VAL $ get_members "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 "science_team"]),
-    ("teams",                           Cnoun, [NOUNCLA_VAL $ get_members "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 "spacecraft"]),
-    ("spacecrafts", Cnoun, [NOUNCLA_VAL $ get_members "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 "place"]),
-    ("places",  Cnoun, [NOUNCLA_VAL $ get_members "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 -> (tshow n, Year, [YEAR_VAL n])) $ List.concat [[1000 + x, 2000 + x] | x <- [0..999]]
-
---test1 p p_ inp = do putStr  $ render80 $ format{-Atts p_-} $ snd $ runState (p T0 [] ((1,[]),words inp) ([],[])) []
-test p input = runState (p ((1,[]),input) ([],[])) []
-
-parse i = formatAttsFinalAlt Question  ((List.length $ T.words i)+1) $ snd $ test (question T0 []) (T.words i)
-
-headParse = getQUVAL . head . parse
-
---formatParseIO = mapM id . map showio . parse
-
-findStart st ((s,ss):rest) | s == st   = [(s,ss)]
-                           | otherwise = findStart st rest
-findStart st []                        = []
-
-input = T.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
diff --git a/XSaiga/TypeAg2.hs b/XSaiga/TypeAg2.hs
deleted file mode 100644
--- a/XSaiga/TypeAg2.hs
+++ /dev/null
@@ -1,342 +0,0 @@
-{-# LANGUAGE Trustworthy #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE FlexibleInstances #-}
-
-module XSaiga.TypeAg2 where
-
-import XSaiga.Getts
-import Data.Text as T hiding (map)
-import XSaiga.ShowText
-import Control.Arrow
-import Data.Bifunctor
-import Data.Biapplicative
-import Data.List (nub)
---import Control.Applicative
-
-type TF a = [Triple] -> a
-data GettsTree =
-      GettsNone
-    | GettsMembers Text
-    | GettsTP [Text] Relation [GettsTree]
-    | GettsPreps [Text] [GettsTree]
-    | GettsIntersect GettsTree GettsTree --representing result of intersect_fdbr (only evs from 2nd tree are kept)
-    | GettsUnion GettsTree GettsTree --representing result of "union" of fdbrs.  Keeps everything.
-    deriving (Eq, Show)
-
-data GettsFlatTypes =
-    FGettsMembers Text
-  | FGettsT [Text] Text
-
-type FGettsMembers = Text
-type FGettsT = ([Text], Text)
-
-type GettsFlat = ([FGettsMembers], [FGettsT])
-
---Convert a function signature to a Getts style function
---Keeps same kind, same arity
-type family Treeify x where
-  --Treeify ((TF a -> b) -> c) = Treeify (TF a -> b) -> Treeify c
-  --Treeify (TF a -> b) = GettsTree -> Treeify b
-  Treeify (TF a) = GettsTree
-  Treeify (a -> b) = Treeify a -> Treeify b
-  Treeify a = GettsTree
-  --Treeify _ = GettsTree<Paste>
-
---TODO: Abstract tree into separate datastructure as Foldable and Traversable
---It seems to me there are five layers:
-{-
-
-User layer: GettsT, GettsPrep, GettsAttachP ... these are like semantic "words"
-Unparsed Tree layer: GettsSubQuery, GettsList, GettsNode ... this is like the parse tree of those "words"
-Semantic (condensed) layer: Group SubQuery, List, Node, etc... into GettsTP, keeping tree
-Flattened layer: Only a list of GettsMembers and a list of GettsTP (flattened tree)
-Optimization layer: Knowledge to reduce queries (subsets, GettsTP of same type)
-
-Semantic tree layer
-Flattened layer
-
--}
-
---A SemFunc is really just a tuple of two functions
-type SemFunc a = (a, Treeify a)
-getGetts = snd
-getSem = fst
-
---TODO: restrict arity of b (same kind as a)
-semFunc :: a -> Treeify a -> SemFunc a
-semFunc = bipure
-
---Just for presentation purposes
-instance Show (TF FDBR) where
-  show x = "TF FDBR"
-
-instance Show (TF Text) where
-  show x = "TF Text"
-
-
-
---Unclean -- Foldable would help
---TODO: filter duplicates
---TODO: make [SemFunc a] not used with gatherPreps, apply directly to verb?
---Would avoid GettsPreps situation
-
-flattenGetts :: GettsTree -> GettsFlat
-flattenGetts GettsNone = ([],[])
-flattenGetts (GettsMembers set) = ([set], [])
-flattenGetts (GettsTP props (rel,_,_) sub) = merge ([], [(props, rel)]) (Prelude.concat *** Prelude.concat $ unzip $ map flattenGetts sub)
-flattenGetts (GettsPreps props sub) = error "Cannot flatten preps"
-flattenGetts (GettsIntersect i1 i2) = merge (flattenGetts i1) (flattenGetts i2)
-flattenGetts (GettsUnion i1 i2) = merge (flattenGetts i1) (flattenGetts i2)
-
-merge :: GettsFlat -> GettsFlat -> GettsFlat
-merge (x1, y1) (x2, y2) = (x1 ++ x2, y1 ++ y2)
-
-(>|<) :: a -> Treeify a -> SemFunc a
-f >|< g = bipure f g
-
---Reduce GettsTree down to minimum number of queries that spans original
---it is okay if they end up pulling in more data than needed
-gettsOptimize :: GettsTree -> GettsTree
-gettsOptimize u = u
-
-flatOptimize :: GettsFlat -> GettsFlat
-flatOptimize (members, gettsTPs) = (nub members, dedupTP)
-  where
-    dedupTP = Prelude.foldr (\(props, rel) -> \optlist -> if Prelude.any (\(_, r) -> r == rel) optlist
-                                                             then map (\(p, r) -> if r == rel then (nub $ props ++ p, rel) else (p, r)) optlist
-                                                             else (props,rel):optlist) [] gettsTPs
-
-getReducedTriplestore :: (TripleStore m) => m -> GettsFlat -> IO [Triple]
-getReducedTriplestore ev_data (sets, trans) = do
-  t1 <- mapM (\set -> getts_triples_members ev_data set) sets
-  t2 <- mapM (\(props, rel) -> getts_triples_entevprop_type ev_data props rel) trans
-  return $ Prelude.concat $ t1 ++ t2
-
-unionerr x y = error $ "attempt to union: " ++ show x ++ " with " ++ show y --TODO: debugging
-
-gettsIdentity f GettsNone y = y
-gettsIdentity f x GettsNone = x
-gettsIdentity f x y = f x y
-
-gettsIntersect = gettsIdentity GettsIntersect
-
-gettsApply g = g GettsNone
-
---TODO: make this a proper union
-gettsUnion = gettsIdentity GettsUnion
-
---apply over the intersect_entevimages, remember evs of im2 are preserved and im1 are discarded
-gettsAttachP :: T.Text -> GettsTree -> GettsTree
-gettsAttachP prop (GettsIntersect x y) = GettsIntersect x (gettsAttachP prop y)
-gettsAttachP prop (GettsTP props rel sub) = GettsTP (prop:props) rel sub
-
---cannot use sequenceA because it would look like
---with (a (telescope (by (a (person))))) instead of (with ( a telescope )), (by (a person))
-gatherPreps :: [SemFunc ([T.Text], t)] -> SemFunc [([T.Text], t)]
-gatherPreps preps = bipure preps_tf (GettsPreps prepNames (map snd preps))
-  where
-    prepNames = nub $ Prelude.concatMap fst preps_tf
-    preps_tf = map fst preps
-
---a <<*>> moon <<*>> spins... 
---PUBLIC INTERFACE (TODO)
---TODO: make_fdbr_with_prop is DANGEROUS
---Get members of named set
---get_members :: (TripleStore m) => m -> Text -> IO FDBR
---get_members = getts_members
-get_members :: Text -> SemFunc (TF FDBR)
-get_members set = (\r -> pure_getts_members r set) >|< GettsMembers set
-
---TODO: revise this for new transitive verb definition.  should not assume these fields in general.
-get_subjs_of_event_type :: Text -> SemFunc (TF FDBR)
-get_subjs_of_event_type ev_type = (\r -> make_fdbr_with_prop (pure_getts_triples_entevprop_type r ["subject"] ev_type) "subject") >|< GettsTP ["subject"] (ev_type, "subject", "object") []
-
-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      ::   SemFunc (TF FDBR) }
-              | ErrorVal        {getEVAL    ::   Text}    
-              | NOUNCLA_VAL     {getAVALS   ::   SemFunc (TF FDBR) } 
-              | VERBPH_VAL      {getAVALS   ::   SemFunc (TF FDBR) }  
-              | ADJ_VAL         {getAVALS   ::   SemFunc (TF FDBR) } 
-              | TERMPH_VAL      {getTVAL    ::   SemFunc (TF FDBR -> TF FDBR)}     
-              | DET_VAL         {getDVAL    ::   SemFunc (TF FDBR -> TF FDBR -> TF FDBR)} 
-              | VERB_VAL        {getBR      ::   Relation } --stores relation, "subject" and "object". TODO: need to expand on later for "used"      
-          | RELPRON_VAL     {getRELVAL  ::   SemFunc (TF FDBR -> TF FDBR -> TF FDBR)}    
-          | NOUNJOIN_VAL    {getNJVAL   ::   SemFunc (TF FDBR -> TF FDBR -> TF FDBR)}
-          | VBPHJOIN_VAL    {getVJVAL   ::   SemFunc (TF FDBR -> TF FDBR -> TF FDBR)}    
-          | TERMPHJOIN_VAL  {getTJVAL   ::   SemFunc ((TF FDBR -> TF FDBR) -> (TF FDBR -> TF FDBR) -> TF FDBR -> TF FDBR) }
-          | PREP_VAL        {getPREPVAL ::   [SemFunc ([Text], (TF FDBR -> TF FDBR))]} -- used in "hall discovered phobos with a telescope" as "with".  
-          | PREPN_VAL       {getPREPNVAL :: [Text]} --used for mapping between prepositions and their corresponding identifiers in the database.  I.e., "in" -> ["location", "year"]
-          | PREPNPH_VAL     {getPREPNPHVAL :: [Text]}
-          | PREPPH_VAL      {getPREPPHVAL :: SemFunc ([Text], (TF FDBR -> TF FDBR))}
-          | LINKINGVB_VAL   {getLINKVAL ::   SemFunc (TF FDBR -> TF FDBR)}
-          | SENTJOIN_VAL    {getSJVAL   ::   SemFunc (TF FDBR -> TF FDBR -> TF FDBR)}
-          | DOT_VAL         {getDOTVAL  ::   SemFunc (TF Text)}
-          | QM_VAL          {getQMVAL   ::   SemFunc (TF Text)}
-          | QUEST_VAL       {getQUVAL   ::   SemFunc (TF Text)}
-          | QUEST1_VAL      {getQU1VAL  ::   SemFunc (TF FDBR -> TF Text)}
-          | QUEST2_VAL      {getQU2VAL  ::   SemFunc (TF FDBR -> TF Text)}
-          | QUEST6_VAL      {getQU6VAL  ::   SemFunc (TF FDBR) -> SemFunc(TF Text)}
-          | QUEST3_VAL      {getQU3VAL  ::   SemFunc (TF FDBR -> TF FDBR -> TF Text)}
-          | YEAR_VAL        {getYEARVAL ::   Int}
-
---            | RESULT [sys_message]
---Also called a "NodeName"
-data MemoL    = Start | Tree | Num | Emp | ALeaf Text | Expr | Op  | ET
-              | Pnoun|Cnoun|Adj|Det|Intransvb|Transvb|Linkingvb|Relpron|Termphjoin|Verbphjoin|Nounjoin|Preps|Prepph|Prepn|Prepnph|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         =  Text  
---type Bin_Rel        =  [(Entity,Entity)] -- [(Int, Int)]
---type Relation     = (ES -> Bool) -> FDBR
-type Relation = (Text, Text, Text)
-
-data DisplayTree = B [DisplayTree]
-                 | N Int
-                   deriving (Show, Eq)
-
-{-instance Show AttValue where
-    show (VAL  j)     = "VAL "    ++ show j
-    show (MaxVal j)   = "MaxVal " ++ show j
-    show (SubVal j)   = "SubVal " ++ show j
-    show (RepVal j)   = "RepVal " ++ show j
-    show (Res j)      = "Tree: "  ++ show j
-    show (B_OP j)     = "B_OP"
-    show (U_OP j)     = "U_OP"
-    show (SENT_VAL j) = show j
-    show (ErrorVal j) =  j
-    show (NOUNCLA_VAL j) = "NOUNCLA_VAL " ++ unwords $ map fst j
-    show (VERBPH_VAL j)  = "VERBPH_VAL " ++ unwords $ map fst j
-    show (ADJ_VAL    j)  = "ADJ_VLA " ++ unwords $ map fst j
-    show (TERMPH_VAL j)  = "TERMPH_VAL "      
-    show (DET_VAL j)     = "DET_VAL " 
-    show (VERB_VAL j)    =  "VERB_VAL " ++ j
-    show (RELPRON_VAL j)  = "RELPRON_VAL "
-    show (NOUNJOIN_VAL j)  = "NOUNJOIN_VAL "
-    show (VBPHJOIN_VAL j)  = "VBPHJOIN_VAL "
-    show (TERMPHJOIN_VAL j)  = "TERMPHJOIN_VAL "
-    show (PREP_VAL j)  = "PREP_VAL "
-    show (LINKINGVB_VAL j)  = "LINKINGVB_VAL "
-    show (SENTJOIN_VAL j)  = "SENTJOIN_VAL "
-    show (DOT_VAL j) = j 
-    show (QM_VAL j) = j 
-    show (QUEST_VAL j) = j 
-    show (QUEST1_VAL j)  = "QUEST1_VAL"
-    show (QUEST2_VAL j)  = "QUEST2_VAL"
-    show (QUEST3_VAL j)  = "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
-    (QUEST6_VAL j)     == (QUEST6_VAL j') = True
-    (PREP_VAL s1)      == (PREP_VAL s) = True
-    (PREPN_VAL s1)     == (PREPN_VAL s) = True
-    (PREPNPH_VAL s1)   == (PREPNPH_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 (QUEST6_VAL  s1)   (QUEST6_VAL  s)     = [QUEST6_VAL s]
-
-setAtt (PREP_VAL s1) (PREP_VAL s) = [PREP_VAL s]
-setAtt (PREPN_VAL s1) (PREPN_VAL s) = [PREPN_VAL s]
-setAtt (PREPNPH_VAL s1) (PREPNPH_VAL s) = [PREPNPH_VAL s]
-setAtt (PREPPH_VAL s1) (PREPPH_VAL s) = [PREPPH_VAL s]
-setAtt (YEAR_VAL s1) (YEAR_VAL s) = [YEAR_VAL s]
---------- *********************** --------------
-
-
-
-
-
-
-
diff --git a/driver/Main.hs b/driver/Main.hs
new file mode 100644
--- /dev/null
+++ b/driver/Main.hs
@@ -0,0 +1,59 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+import qualified XSaiga.CGI as C
+
+import qualified XSaiga.SolarmanTriplestore as App
+
+import qualified XSaiga.TypeAg2 as TypeAg
+
+import qualified Data.Text as T
+import qualified Data.Text.IO as TIO
+
+import System.IO
+
+#ifdef ASTERIUS
+
+import Asterius.Aeson
+import Asterius.ByteString
+import Asterius.Text
+import Asterius.Types
+
+import qualified Data.Text.Encoding as TE
+import qualified Data.ByteString.Lazy as BL
+
+foreign import javascript safe "get_query()" get_query :: IO JSString
+foreign import javascript safe "update_results($1)" update_results :: JSString -> IO ()
+
+#ifdef INSTORE
+dataStore = Local.localData
+#else
+dataStore = C.asteriusRemoteData
+#endif
+
+main = do
+    jsString <- get_query
+    let input_query = textFromJSString $ jsString
+    json_utf8 <- C.interpret' dataStore input_query
+    update_results $ textToJSString (TE.decodeUtf8 $ BL.toStrict json_utf8)
+#else
+
+main = C.main
+
+#endif
+
+--main = TIO.putStrLn $ T.pack "Hello world"
+
+--main = (C.runQuery $ TypeAg.get_members "moon") >>= (\x -> TIO.putStrLn $ T.intercalate "," (map fst x))
+
+--main = putStrLn $ "test: " ++ (show $ map (TypeAg.getGetts . TypeAg.getQUVAL) $ App.parse "which vacuumous moon orbits a brown planet that was discovered by hall or galileo or a person that discovered a moon in 1877 with a telescope")
+
+--main = putStrLn $ "test: " ++ (show $ map (TypeAg.getGetts . TypeAg.getQUVAL) $ App.parse "what did hall discover")
+
+--main = putStrLn $ show $ TypeAg.getGetts $ TypeAg.get_members "moon"
+
+--main = putStrLn $ show $ TypeAg.flatOptimize $ TypeAg.flattenGetts $ TypeAg.getGetts $ App.make_trans_active App.discover_rel $ (App.intersect_fdbr $ TypeAg.get_members "moon")
+
+--main = do
+--    let trees = map (show . snd) $ App.parseTree "which vacuumous moon orbits a brown planet that was discovered by hall or galileo or a person that discovered a moon in 1877 with a telescope"
+--    mapM_ putStrLn trees
diff --git a/src/XSaiga/AGParser2.hs b/src/XSaiga/AGParser2.hs
new file mode 100644
--- /dev/null
+++ b/src/XSaiga/AGParser2.hs
@@ -0,0 +1,915 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE BangPatterns #-}
+
+
+module XSaiga.AGParser2 where
+import Prelude hiding ((*>))
+import Data.List
+import Data.Maybe
+import qualified Data.Text as T
+import XSaiga.TypeAg2 hiding (Result)
+import Control.Monad
+import Control.Applicative hiding ((<|>), (*>))
+import Control.Monad.State.Strict
+import Data.Constructors.EqC
+
+--import qualified Data.Map.Strict as Map
+import qualified Data.HashMap.Lazy as HashMap
+import qualified Data.Map.Strict as Map
+--import qualified Data.Map.Lazy as Map.Lazy
+import qualified Data.IntMap.Strict as IntMap
+import qualified Data.Set as Set
+
+import qualified Data.Foldable as Fold
+import qualified Data.Vector as Vector
+
+import Debug.Trace
+
+--import qualified Data.Data as Data
+
+import GHC.Generics (Generic, Rep)
+import Generic.Data (GConstructors)
+
+{-
+Finished improvements:
+    * Use a map for the top level of the memo table
+    * Cassini no longer refers to the wrong entry voyager_2
+    * superterminals, needed for dictionaryless pnouns, cnouns, adjs
+    * disambiguated grammar for years and locations
+    * Decouple TypeAg2 from AGParser2 (parameterize AttValue)
+    * Using a vector of T.Text instead of a list for faster indexing (O(1))
+    * Using a set for the set of MemoL's instead of a list acting as a set
+    * Using maps for Context
+    * Merging Map of Maps into just a singular Map keyed over (Int,MemoL)
+    * More types explicitly named and written out
+    * Simplified logic for checking contexts
+    * Add more type annotations that explain what is going on a bit better
+    * Remove pointless atts attached to the input string.  They were ignored/not used at all anyway!
+    * terminalSet for efficient terminals
+    * superterminals to "try" a terminal of any sequence of characters
+    * Replace [Tree] with Tree in Result
+    * InsAttVals has a better representation -- but note that duplicate instances are ignored (as in the original version).  Multiple attributes are allowed
+    * atts are pre-applied to the semantic functions.  This makes it more convenient
+    * Attributes are represented in an IntMap based on the constructor chosen.  The att must be an instance of Generic and GConstructors (Rep att) and it needs to be lazy in its values until
+      I can figure out some other way that doesn't involve applying "undefined" to the constructor to figure out which data constructor it is.  Not a huge deal thankfully.
+      Multiple attributes are permitted provided they are unique in the data constructor chosen.  This mirrors how attribute grammars are written out.
+    * Better error reporting
+    * Improved condCheck code taking advantage of maps
+    * Alternative representation for table: instead of (Start1, End), use ((Start :: Int,End :: Int),(InhAtts,SynAtts)) -- facilitates easier processing
+    * Find another way to find "equivalence" between AttValues.  See TypeAg2 where the annoying bit is with instance Eq (solved using Generics)
+    * Find all instances where empty lists are used to denote "not found" and singletons are used to denote "found" and replace with Maybe
+        --NOTE: it seems like parses are treated like cartesian products with SeqType -- so an empty parse needs to be something "empty" and not a failure condition
+        --this is required to handle ambiguity
+
+TODO Improvements:
+
+    * Would there be any benefit to a Lazy IntMap, etc?  How aren't the atts not crashing and burning with the strict maps?
+    * Use HashMaps/IntMaps everywhere except where Ord is really needed?
+    * Extract the constructor from the getter directly?  or construct our own getter using the provided data constructor? would be nice to do getAtt QUEST_VAL atts
+       --want to avoid using "typ undefined" in getAttVals
+    * Make all attribute maps lazy in the values?  Is this needed?
+    * Hash the T.Text for the AttValue instead of using it directly -- this may no longer be needed with the IntMap
+    * use ((Start :: Int,End :: Int),(InhAtts,SynAtts)) to key on (Int,Int).  Each pair of atts is a valid parse.  Use this to speed things up a bit.
+    * Simplified memotable list of results: it no longer stores inherited atts (Start1) beside the set of results, it just stores the start position (Int)
+    * multi-terminal: a terminal consisting of N or more tokens.  Like "refractor telescope 1" or "asaph hall"
+    * Better representation for attributes.  In particular, synthesized and inherited atts should be separated, and they should have names (not drawn from the same pool)
+      Those names should be independent of the type.  Example. Rule.value = "100", Rule.size = 3 (for synthesized).  These names should not be hardcoded!
+      Note that whatever is done, lazy evaluation must be accommodated to prevent infinite loops.
+    * Elimination of all space leaks -- may not be possible directly since many thunks could build up during evaluation from inherited atts
+    * Use Unboxed/Storable Vector/HashMap? Probably not possible except with the IntMap
+    * Find another way to signal an error for slot mismatch (S1/S3 given with nt and S1/S2 requested)
+    * Move data Id to here from TypeAg2 or ideally, make it a part of the type constructor
+    * MemoL needs to be unique per memoize block, is this able to be generated automatically?  or can we at least make it part of the type constructor?
+    * Move the example code to a new file (with the +-/* grammar), use the parameterized code to do this
+    * Make a better syntax for the parser.  The list based syntax leaves a lot to be desired.
+    * New name for the parser.  XSaiga-NG?
+    * Decouple error reporting from AttValue -- we use "error" right now when we really ought to use an Either
+    * okay so memoized and unmemoized return the same type... but unmemoized never seems to work?  need type level correction
+        * REASON: terminals return Leafs, not SubNodes.  it's the memoization that creates the SubNode.  So terminal by itself, unmemoized, won't work due to findAtts only looking at SubNodes.
+    *** "or" and "and" should not be ambiguous except when used with each other.  for example
+        "hall or phobos or deimos and hall or kuiper or galileo" should only be ambiguous around the "and":
+        "(hall or (phobos or (deimos))) and (hall or (kuiper or (galileo)))"
+        "hall or (phobos or ((deimos and hall) or (kuiper or galileo)))"
+        in other words, "or" and "and" should go to the left, but should still be ambiguous with respect to each other
+    *** would be nice to be able to tag a superterminal with the key used to tag it for presentation
+        eg, "hall discovered" => (Pnoun_(hall)) discovered
+            "which moons were discovered by hall in 1877" => which (Cnoun_(moons)) (were discovered [by (Pnoun_(hall)), in (Year_(1877))])
+    *** which x discovered which y using a telescope
+
+    "every" seems to be able to answer "no" style questions kind of
+
+
+-}
+
+---- ************************************ -----------------------
+
+--TODO: NILL seems to be only used for "empty" which is a function that seems useful only for building recognizers?
+--and it seems like "empty" recognizes any terminal anyway?  what is the use of that?
+data SorI     = S | I | NILL  deriving (Eq,Ord,Show,Enum)
+                -- Synthesized or inherited or NILL
+
+type Instance = (SorI, Id)
+                -- uniquely determines synthesized or inherited attribute for an NT
+
+data Useless  = OF|ISEQUALTO  deriving (Show, Eq)
+                -- for decorating the semantic rules
+
+type Error = T.Text
+
+type AttName = Int
+
+type Atts att   = IntMap.IntMap att -- [(AttType, AttValue)] --TODO: change to Set of atts or have some kind of meaningful indexing based on type
+
+--TODO: make this a map!  these are supposed to be unique per parse.  Note that it is possible to get the same instance twice (e.g. multiple rule_s)
+--This is supposed to represent different synthesized attributes for the same production.
+type InsAttVals att = Map.Map Instance (Atts att)
+
+type Start     = (Int, Vector.Vector T.Text) --What purpose does this Int serve?
+
+--NOTE: may want to use HashMap instead: https://github.com/haskell-perf/dictionaries#from-list-int-keys
+type ContextMap = Map.Map (Int,MemoL) Int
+type Context  = (Set.Set MemoL, ContextMap)
+
+--These are the same??
+type Start1 att  = (Int, InsAttVals att)
+type End att    = Start1 att
+
+type StartEnd att = ((Int,Int),(InsAttVals att, InsAttVals att)) --Store just the end position, inherited atts and synthesized atts in the results
+
+data Tree att = Leaf (MemoL,Instance)
+            | SubNode ((MemoL, Instance), StartEnd att) --But need both positions for the tree for getting the parse tree later
+            | Branch [Tree att]
+              deriving (Show)
+
+type Result att  = [(StartEnd att,Tree att)] --TODO: how is the StartEnd here different than the one in the Tree?
+
+type ParseResult att = (Context,Result att)
+
+--Also called an "MTable" or "State" originally
+type MemoTable att = Map.Map (MemoL,Int) (ParseResult att) -- The "Int" corresponds to the Int of a Start1, that is the starting position.  TODO: add a second Int for the ending position!
+
+type M att = Start -> Context -> State (MemoTable att) (ParseResult att)
+
+--NOTE: the parser itself also returns this.  Parser sems to play the role of attaching semantics to syntactic rules.  Without parser, it just is a recognizer.
+--TODO: should these be labeled separately, even if they have the same type?
+--TODO: is nttype <|> parser (nt blah T0) [rules] valid?  would it work the same as if the atts were just copied?
+--NOTE: this was called AltType before
+type NTType att = Id -> (InsAttVals att) -> (M att)
+
+type SemRule att = (InsAttVals att, Id) -> att
+--type SemRule att = (Instance, AttName, (InsAttVals att, Id) -> att)
+
+type SeqType att = Id -> (InsAttVals att) -> [(Instance, SemRule att)] -> (Result att) -> (M att)
+
+------------
+
+
+--------------- ******************************************** ---------------------------
+--Originally called AltType?
+(<|>) :: NTType att -> NTType att -> NTType att
+(p <|> q) idx inhx (i,inp) c
+ = do (l1,m) <- p idx inhx (i,inp) c
+      (l2,n) <- q idx inhx (i,inp) c
+      return ((Set.union (fst l1) (fst l2),Map.empty), (m ++ n))
+
+foldrM' f !z0 xs = foldl' f' return xs z0
+  where f' k !x z = f x z >>= k
+
+
+--TODO: space leak here?
+--TODO: change lists of attributes to vectors or something that's not a list
+--------------------------------------------------------
+(*>) :: SeqType att -> SeqType att -> SeqType att
+(p *> q) idx inhx semx resx (i,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 (Set.union prev new)
+             else prev
+
+          combiner q cc r (l2,n) = do
+                (l1,m) <- q `add_P` (r,cc)
+                return ((Set.union (l1) (fst l2),Map.empty),(m ++ n))
+
+          apply_to_all q rs l cc = foldrM' (combiner q cc) ((fst l,Map.empty),[]) rs
+
+          q `add_P` (rp,cc)
+            = do let e  = pickEnd rp
+                 (l1,m) <- (q idx inhx semx resx (e,inp) (passCtxt e))
+                 return ((mergeCuts e (fst l) (fst l1)),(addP m rp))
+
+      (apply_to_all q m l cc) -- CHANGE cc HERE
+
+--TODO: Make the below readable
+pickEnd :: (StartEnd att,Tree att) -> Int
+pickEnd (((s,e),(iA,a)),t) = e --NOTE: This is a Start1's Int
+
+--NOTE: addP = addParse?
+addP :: Result att -> (StartEnd att, Tree att) -> Result att
+addP  [] ((s1,e1),t1)                    = []
+addP  ((((s2,e2),(inA2,synA2)),t2):restQ) (((s1,e1),(inA1,synA1)),t1)
+ = (((s1,e2),(empty_insattvals,empty_insattvals)),  a_P_Q_branch) : addP  restQ (((s1,e1),(inA1,synA1)),t1)
+
+   where
+   a_P_Q_branch = addToBranch (((s2,e2),(inA2,synA2)),t2)  (((s1,e1),(inA1,synA1)),t1)
+
+-------- ************* ---------------
+--NOTE: it seems the top level Tree is simply a singleton?
+addToBranch :: (StartEnd att, Tree att) -> (StartEnd att, Tree att) -> Tree att
+addToBranch (q1,((SubNode (name2,q))))
+            (p1,((SubNode (name1,p))))
+                            = Branch [(SubNode (name1,p)),(SubNode (name2,q))]
+
+addToBranch (q1,((Branch t2)))
+            (p1,((Branch t1)))
+                            = Branch (t1++t2)
+
+addToBranch (q1,((Branch t2)))
+            (p1,((SubNode (name1,p))))
+                            = Branch ((SubNode (name1,p)):t2)
+
+addToBranch (q1,((SubNode (name2,q))))
+            (p1,((Branch t1)))
+                            = Branch (t1++[(SubNode (name2,q))])
+
+
+addToBranch (q1,((SubNode (name2,q))))
+            (p1,Leaf (x,i))
+                            = Branch [(SubNode ((x,i) ,p1)),(SubNode (name2,q))]
+addToBranch (q1,Leaf (x,i))
+            (p1,((SubNode (name1,p))))
+                            = Branch [(SubNode (name1,p)),(SubNode ((x,i),q1))]
+addToBranch (q1,((Branch t2)))
+            (p1,Leaf (x,i))
+                            = Branch ((SubNode ((x,i),p1)):t2)
+addToBranch (q1,Leaf (x,i))
+            (p1,((Branch t1)))
+                            = 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 :: Context
+empty_cuts = (Set.empty,Map.empty)
+
+empty_result :: ParseResult att
+empty_result = (empty_cuts,[])
+
+empty_insattvals :: InsAttVals att
+empty_insattvals = Map.empty
+
+empty :: InsAttVals att -> M att
+empty atts (x,_) l = return (empty_cuts,[(((x,x),(empty_insattvals,atts)), Leaf (Emp, (NILL,O0)))])
+
+--default_attname = "value"
+
+--NOTE: this is used like: test (question T0 []) (vWords), so id and downAtts come from that!  The start, context from test come later.
+--      This evalutes to runState (question T0 [] ((1,[]),input) empty_cuts) Map.empty.
+--      Meaning id = T0, downAtts = [], inp = 1, dAtts = [], dInput = input, context = empty_cuts.
+--TODO: space leak here?
+memoize :: MemoL -> NTType att -> NTType att
+memoize name f id downAtts (inp,dInput) context
+ = do s <- get
+      case (lookupT (name,inp) (snd context) s) of
+       Just lRes -> do let lookUpRes = addNode name (S, id) (inp,downAtts) (snd lRes)
+                       return (fst lRes,lookUpRes)
+       Nothing
+           | funccount (snd context) inp name > (length dInput) - inp + 1 --NOTE: number of remaining input tokens is (length dInput) - inp + 1
+               -> return ((Set.singleton name,Map.empty),[]) --TODO: how to return a failed parse?  good opportunity for error values!
+           | otherwise -> do let iC = (Set.empty,(addNT name inp $ snd context))
+                             (l,newRes) <- f id downAtts (inp,dInput) iC --NOTE: iC, inputContext?
+                   -- let ((l,newRes),s1) = unMemoTable (f id downAtts (inp,dAtts) iC) s
+                             let l1          = makeContext (fst l) inp (snd context)
+                             s1             <- get
+                             let !udtTab     = udt (l1,newRes) (name,inp) s1 --NOTE: "f" above may alter the memo table, so we need s1 here. Map.insert (name,inp) (l1,newRes) s1
+                             put udtTab
+                             let newFoundRes = addNode name (S, id) (inp,downAtts) newRes --NOTE: addNode seems to refer specifically to synthesized atts here
+                             return (l1,newFoundRes)
+
+--TODO: must preserve strictness with replaceSnd'!
+--replaceSnd' !key def f map = Map.insertWith (\_ -> \old_value -> f old_value) key def map
+
+
+--NOTE: Should this return all matches?  why return a list?
+--findWithFst_orig key = find ((== key) . fst)
+--Answer: No, because before, empty/singleton lists were treated like Maybe, and lists of pairs are treated like maps
+
+--NOTE: findWithDefault resolved it the space leak here using Map.lookup!
+--NOTE: funccount needs name to be strict to not have a space leak
+--NOTE: using Maybe also seems to cause a space leak, maybe because Maybe is lazy?
+funccount :: ContextMap -> Int -> MemoL -> Int
+funccount list !inp !name = Map.findWithDefault 0 (inp,name) list
+
+--NOTE: a singleton with an empty map is treated the same as an empty map anyway, in condCheck, so just unify the two cases
+--      i.e., passing a Just $ Map.empty from a Map.lookup in condCheck is the same thing as passing in Nothing.
+--NOTE: this differs from the original a bit -- the original could return a singleton with an empty map.  this one won't do that.
+--Implications: it seems before that (inp, Map.empty) was treated the same as not having inp in the map at all.  replaceSnd' treats both the same anyway.
+--NOTE: Be aware of this in case this broke something
+{-
+Old definition that for sure worked is as follows:
+makeContext :: Set.Set MemoL -> Maybe (Int, Map.Map MemoL Int) -> Context
+makeContext rs js | Set.null rs     = empty_cuts
+                  | Just (st,ncs) <- js = (rs, Map.singleton st (Map.filterWithKey (\k _ -> k `elem` rs) ncs)) -- (rs, [(st, concatMap (flip filterWithFst ncs) rs)])
+                  | otherwise           = (rs, Map.empty)
+-}
+makeContext :: Set.Set MemoL -> Int -> ContextMap -> Context
+makeContext rs st js = (rs, memos)
+    where
+        memos = Map.restrictKeys js (Set.map (\q -> (st,q)) rs) -- (rs, [(st, concatMap (flip filterWithFst ncs) rs)])
+
+--Merged with incContext
+addNT !name !inp = Map.insertWith (\_ old_value -> old_value + 1) (inp,name) 1 --replaceSnd' (inp,name) 1 (1+)
+
+--NOTE: could be a Start1 att or and End att
+addNode :: MemoL -> Instance -> (Int, InsAttVals att) -> Result att -> Result att
+addNode name id (s',dA) [] = []
+
+--NOTE: is this where the label gets replaced for usage in other productions? like `nt blah S0`, where S0 becomes the name of LHS for that rule?
+--NOTE: seems so.
+addNode name id (s',dA)  oldResult -- ((((s,newIh),(e,atts)),t):rs)
+ = let --res     = packAmb oldResult --NOTE: never actually used.  Seems to have been an attempt to reconcile multiple attributes from different rules?
+       s_id = snd id
+       --newSh x = [ ((sOri, s_id),attVal)| ((sOri, _),attVal)<- x]
+       newSh = Map.foldrWithKey (\(sOri, _) -> Map.insert (sOri,s_id)) Map.empty
+   in  [let newShAtts = newSh atts in (((s,e),(newIh, newShAtts)),SubNode ((name, id),((s,e),(dA, newShAtts))))
+       | (((s,e),(newIh,atts)),t) <- oldResult] --NOTE: here t is not enforced as a singleton list, but also note that t is thrown out
+
+--NOTE: Does not seem to be used???  WAS referenced above but not used in addNode with let res = packAmb oldResult
+--NOTE: this seems broken somehow, as when it is used above instead of oldResult, it will skip valid parses.
+--NOTE: it seems like this is only able to merge 2 things?  Was it intended to do more than that?  No reference in the literature.
+--NOTE: packAmb relies on there being a list of trees (for t1 ++ t2).  But it seems that singleton lists of trees are enforced in a lot of places.
+{-
+packAmb :: Result att -> Result att
+packAmb [] = []
+packAmb [x] = [x]
+packAmb (x:y:ys) = if isEq x y then packAmb $ (packer x y):ys else x:packAmb (y:ys)
+  where
+  packer :: (StartEnd att, Tree att) -> (StartEnd att, Tree att) -> (StartEnd att, Tree att)
+  packer ((s1, e1), t1) ((s2, e2), t2) = ((s2, (fst e2, groupAtts (snd e1 ++ snd e2))), t1 ++ t2)
+  isEq :: (StartEnd att, Tree att) -> (StartEnd att, Tree att) -> Bool
+  isEq (((s1,_),(e1,_)),_) (((s2,_),(e2,_)),_) = s1 == s2 && e1 == e2
+-}
+--TODO: evaluate if this strictness annotation is truly needed
+lookupT :: (MemoL,Int) -> ContextMap -> MemoTable att -> Maybe (ParseResult att)
+lookupT key@(_,inp) !context mTable = do
+    res_in_table <- Map.lookup key mTable
+    if checkUsability inp context res_in_table then return res_in_table else Nothing --TODO: lookupRes uses Maybe which might cause a space leak
+
+--TODO: another example right here of where a list is clearly used as a map!
+lookupRes :: Int -> [(Int,(ParseResult att))] -> Maybe (ParseResult att)
+lookupRes inp res_in_table = find (\(i, _) -> i == inp) res_in_table >>= return . snd
+
+checkUsability :: Int -> ContextMap -> (ParseResult att) -> Bool
+checkUsability inp context x@((re,sc),_) = null re || checkUsability_ (findInp inp context) (findInp inp sc)
+  where
+  --NOTE: In old version, want Nothing to be the case if list is empty or the inp could not be found
+  --TODO: ensure findImp is strict
+  findInp :: Int -> ContextMap -> ContextMap
+  findInp inp = Map.takeWhileAntitone (\(k,_) -> k == inp) . Map.dropWhileAntitone (\(k,_) -> k /= inp)
+
+  checkUsability_ :: ContextMap -> ContextMap -> Bool
+  checkUsability_ = condCheck
+
+  --NOTE: the use of Maybe in the original checkUsability complicates the logic for no reason.  The results are the same for Just Map.empty and Nothing.
+
+  --checkUsability_  _         Nothing      = True -- if lc at j is empty then re-use
+  --checkUsability_ Nothing    _            = False    -- if cc at j is empty then don't re-use
+  --checkUsability_ (Just ccs) (Just scs)  | condCheck ccs scs = True
+  --                                       | otherwise = False
+  --TODO: this is really unoptimal!  this could be significantly improved
+  --The idea: each sc should have a corresponding cc that is greater than it
+  --NOTE: second arg was called scs
+  condCheck :: ContextMap -> ContextMap -> Bool
+  --condCheck ccs = Map.foldrWithKey' (condCheck_ ccs) True
+  --condCheck_ :: ContextMap -> (Int,MemoL) -> Int -> Bool -> Bool
+  --NOTE: findWithDefault set to -1 to avoid the Maybe, and -1 is strictly below any of the allowed values of cs1
+  --condCheck_ ccs n1 cs1 b = (cs1 <= Map.findWithDefault (-1) n1 ccs) && b
+
+  --Read as "does ccs subsume scs?  is everything in scs inside ccs with a higher count in ccs?"
+  condCheck ccs scs = Map.isSubmapOfBy (\cs1 cs -> cs1 <= cs) scs ccs --TODO: test this!  it should be equivalent to the original.
+
+{-nub (dA ++ dAtts)-}
+--udt == "update table"?
+--TODO: nub is odd choice here, find out why it's needed.  seems to be used to remove duplicate attributes in the same slot (S1, S2... etc).  But why is this needed?
+--TODO: at the very least we should be using a map for those attributes to prevent this from happening!
+udt :: (ParseResult att) -> (MemoL,Int) -> MemoTable att -> MemoTable att
+udt res !key = Map.insert key res
+
+--TODO: this absolutely sucks.  need to do this *right*.
+--NOTE: it looks like the Start1's inp is used as a unique key?  Perhaps we should do: Map.Map Int (InsAttVals, (ParseResult att)) instead?
+replaceSndG :: Int -> (ParseResult att) -> [(Int, (ParseResult att))] -> [(Int, (ParseResult att))]
+replaceSndG inp res list
+  = before ++ replaceFirst replacePoint
+  where
+    (before, replacePoint) = break ((== inp) . fst) list
+    def = (inp,res)
+    replaceFirst [] = [def]
+    replaceFirst ((a, b):nc) = def:nc
+
+my_merge :: Int -> (ParseResult att) -> [(Int, (ParseResult att))] -> [(Int, (ParseResult att))]
+my_merge inp res = replaceSndG inp res
+
+{-
+my_merge (inp,ndAtts) res [] = [((inp,ndAtts), res)]
+my_merge (inp,ndAtts) res (((i,dA), es):rest)
+               |inp == i  = ((inp,ndAtts), res):rest
+               |otherwise = ((i,dA), es): my_merge (inp,ndAtts) res rest
+-}
+
+--------------- ************************* semantics of ATTRIBUTE GRAMMAR ************************* --------------------------
+
+--                               atts          iatts      Context was "l"
+
+--superterminal is like terminal, but does not require all possibilities to be enumerated.
+--use "f" to determine if a token may make a suitable terminal
+--Nothing -> means throw it out
+--Just a -> use it
+superterminal :: (Generic att, GConstructors (Rep att)) => MemoL -> (T.Text -> Maybe [att]) -> NTType att
+superterminal key f = memoize key (superterminal' f)
+
+superterminal' :: (Generic att, GConstructors (Rep att)) => (T.Text -> Maybe [att]) -> NTType att
+superterminal' f id _ q@(r,dInp)
+ = term q --trace ((show $ T.intercalate " " dInp) ++ show q) $ term q
+    where
+    inst = (S, id)
+    instAttVals atts =  Map.singleton inst atts
+    --term :: M att --NTType
+    term (r,dInp) _ = if r - 1 == Vector.length dInp then return empty_result else let str = Vector.unsafeIndex dInp (r - 1) in case f str of
+        Nothing -> return empty_result
+        Just attVals ->
+            let sems = IntMap.fromList $ map (\attVal -> (constrName attVal,attVal)) attVals
+            in return (empty_cuts,[(((r,r+1),(empty_insattvals,instAttVals sems)),Leaf (ALeaf str, inst))])
+
+--terminal uses default AttName default_attname
+terminal :: (Generic att, GConstructors (Rep att)) => T.Text -> [att] -> NTType att
+terminal str attVals id _ (i,inp)
+ = term str ((i,[]),inp)  --NOTE: the downAtts are ignored regardless?
+    where
+    semRules = IntMap.fromList $ map (\attVal -> (constrName attVal,attVal)) attVals
+    inst = (S, id)
+    insAtts = Map.singleton inst semRules
+    --term :: T.Text -> M att
+    term str ((r,_),dInp) _
+     |r - 1 == Vector.length dInp            = return empty_result
+     |Vector.unsafeIndex dInp (r - 1) == str = return (empty_cuts,[(((r,r+1),(empty_insattvals,insAtts)),Leaf (ALeaf str, inst))])
+     |otherwise                              = return empty_result
+
+--NOTE: This takes into account multiple rules as if (terminal b x <|> terminal a z) were used
+terminalSet :: (Generic att, GConstructors (Rep att)) => MemoL -> HashMap.HashMap (MemoL,T.Text) [[att]] -> NTType att
+terminalSet key hashMap id _ (i,inp)
+ =  actualTerm
+    where
+    selectedSemRules | i - 1 == length inp = Nothing
+                     | otherwise = HashMap.lookup (key,word) hashMap
+    word = Vector.unsafeIndex inp (i - 1) --shouldn't be evaled until needed
+    actualTerm _ = case selectedSemRules of
+        Just attValsList ->
+            let inst = (S, id) in
+            let gen = (\attVals -> let atts = IntMap.fromList $ map (\attVal -> (constrName attVal,attVal)) attVals in let insAtts = Map.singleton inst atts in (((i,i+1),(empty_insattvals,insAtts)),Leaf (ALeaf word, inst))) in
+                return (empty_cuts, map gen attValsList)
+        Nothing -> return empty_result
+
+groupRule'' inst semRules = filter (\(_inst, _) -> inst == _inst) semRules --TODO: way inefficient.  Need better representation for rules if we're going to do this!
+
+nt :: (Generic att, GConstructors (Rep att), Show att) => NTType att -> Id -> SeqType att
+nt fx idx id inhAtts semRules altFromSibs
+ = let ownInheritedAtts       = mapInherited (groupRule'' (I, idx) semRules) altFromSibs inhAtts id --NOTE: multiple rule_i allowed!
+   in fx idx ownInheritedAtts --NOTE: THIS IS WHERE inAtts changes for the rule!
+
+--NOTE: So it seems a terminal may contain one or more atts (multiple atts per slot, like S0, S1...)
+--      but it seems like a rule will always yield one att.
+--      multiple atts are therefore obtained from different rules.
+parser :: (Generic att, GConstructors (Rep att), Show att) =>  SeqType att -> [(Instance, SemRule att)] -> NTType att
+parser synRule semRules id inhAtts i c
+ =      do
+           !s <- get
+           let ((e,altFromSibs),d)     =
+                let sRule                        = groupRule'' (S, LHS) semRules --NOTE: multiple rule_s allowed!  but rule_s S0 seems to not make sense -- it is completely ignored.  Need type level guarantee.
+                    ((l,newRes),st)              = runState ((synRule id inhAtts semRules altFromSibs) i c) s --NOTE: whoa. altFromSibs being used recursively.
+                in  ((l, mapSynthesize sRule newRes id),st)
+           put d
+           return (e,altFromSibs)
+
+--NOTE: see note above.  a rule evaluates to a single att.  But here, we wrap it into a singleton list of atts.  We do the same with inherited atts.
+--TODO: why?  can we improve the InsAttVals representation with this?
+--NOTE: this seems to overwrite the id with the provided one -- is this where "LHS" gets replaced with the nt idx thing?
+--NOTE: this code probably wouldn't work if there were multiple rule_s, even originally, as the atts wouldn't be merged.  Originally it would just have a duplicate instance
+    --but here, we'll just error out.  It seems originally it would have just been ignored later in getAtts anyway.  Should we groupAtts?  It seems like that may have been what it was for.
+--TODO: duplicate instances -- we just throw out duplicates but what should we do?  should synthesized atts be merged?  should we enforce only one att per instance as well?
+mapSynthesize :: (Generic att, GConstructors (Rep att), Show att) => [(Instance,SemRule att)] -> Result att -> Id -> Result att
+mapSynthesize []   res id   = res
+mapSynthesize sems res id
+ = let appSems' :: (Generic att, GConstructors (Rep att), Show att) => [(Instance,SemRule att)] -> InsAttVals att -> InsAttVals att
+       appSems' rules vals = Map.singleton (S,id) $ IntMap.fromListWith (error "mapSynthesize: Attempted to assign the same attribute twice!") (map (\(_,rule) -> let attVal = rule (vals,id) in (constrName attVal,attVal)) rules)
+       --NOTE: simplfied to just S, as ud would always be S.  NOTE: multiple rule_s are allowed now provided they do not alias the same destination attribute!
+       {-appSems' [] vals        = []
+       appSems' (((ud,_),r):rules) vals
+        = let
+            att = r (vals, id)
+            --((ud, _), atts) = (i, [r (vals, id)]) --NOTE: it's a singleton att, but terminals may have *multiple* atts.  TODO: it is POSSIBLE to have multiple rule_s.  They would each have the same instance!  Only the first one would be respected by default?
+          in  ((ud, id), [att]) : appSems' rules vals-}
+   in  [(((st,en), (inAtts,appSems' sems (findAtts t))),t) --TODO: this may be why using nt without memoize doesn't work for terminals -- findAtts specifically checks SubNodes and not Leafs
+       |(((st,en), (inAtts,synAtts)),t) <- res] --TODO: why is findAtts needed?  why doesn't using synAtts work?
+           --NOTE: the actual synAtts are ignored entirely!  it expects the atts to be in t.  Note that each rule adds an element to the result.
+
+--TODO: (vals,id) could be separate arguments without ANY real problem!!!!!
+--TODO: what do we do if the union of two InsAttVals maps contains a DUPLICATE VALUE?! before this was just a concatMap, would RETAIN duplicate KEYS
+--TODO: do we just join them together?!! WTF.  This may be related to the fact that a rule really returns just a regular old att instead of an InsAttVals att!!!!
+--NOTE: terminals may have multiple atts, but a rule must always give a single att?
+--TODO: duplicate instances will be deleted -- how to handle multiple rule_s?  ignored in original too.
+applySemantics :: (Generic att, GConstructors (Rep att), Show att) => InsAttVals att -> Id -> [(Instance,SemRule att)] -> InsAttVals att
+applySemantics vals id rules = Map.fromListWith (IntMap.unionWith $ error "mapInherited: attempted to assign the same attribute twice!") $ map (\(i,rule) -> let res = rule (vals,id) in (i, IntMap.singleton (constrName res) res)) rules
+    --Map.fromListWith (IntMap.unionsWith (error "mapInherited: attempted to assign the same attribute twice!")) . map (\rule -> let res = rule (vals,id) in ((constrName res), res)) --NOTE: it's a singleton att, but terminals may have *multiple* atts. TODO: separate representation for inherited atts?
+
+unionsWithKey :: (Foldable t, Ord k) => (k -> a -> a -> a) -> t (Map.Map k a) -> Map.Map k a
+unionsWithKey f mps = foldr (\mp combined -> Map.unionWithKey f mp combined) Map.empty mps
+unionsWith :: (Foldable t, Ord k) => (a -> a -> a) -> t (Map.Map k a) -> Map.Map k a
+unionsWith f mps = foldr (\mp combined -> Map.unionWith f mp combined) Map.empty mps
+
+--NOTE: inherited atts have form OF Id that is NOT LHS
+--      synthesized atts have the form OF LHS.  Could this be part of what's going on here?
+--TODO: should the list of atts be a Set?  it seems uniqueness of InsAttVals was enforced in a number of places via nub, which would have eliminated duplicates.. although duplicate atts were allowed
+--NOTE: it seems that all subsequent duplicate instances would have been completely ignored, except for the first two inherited downAtts which would have had their atts merged via concat
+--      in groupAtts.  This is possibly why nub was used on the downAtts?
+--NOTE: the Instance should be expanded to include the ***TYPE*** OF THE ATT
+--NOTE: increasingly, it seems to make sense to have a one attribute per Instance correspondance
+--TODO: duplicate instance meaning!  the original would just take precedence in the following order: downAtts, synAtts, and then findAtts.
+--NOTE: downAtts very likely may be all the same instance, so groupAtts might have made sense on it.  But that would imply that grouping atts of the same instance makes sense.
+mapInherited :: (Generic att, GConstructors (Rep att), Show att) => [(Instance,SemRule att)] -> Result att -> InsAttVals att -> Id -> InsAttVals att
+mapInherited sems res downAtts id | Map.null downAtts
+  = Map.unions [applySemantics (findAtts t) id sems | (_,t) <- res] --TODO: seems synAtts are ignored if there are no downAtts -- WHY?  was this an oversight?  seems to work if we include synAtts on one test case...
+
+mapInherited sems []  downAtts id
+  = applySemantics downAtts id sems -- concat ( map (appSems id sems) (group downAtts))
+
+mapInherited sems res downAtts id
+  =  Map.unions [applySemantics (Map.unions [downAtts, synAtts, (findAtts t)]) id sems --TODO: purpose of findAtts here?? (NOTE: probably to get the atts of the children of the production rule)
+              | ((_, (_,synAtts)),t) <- res]
+
+--NOTE: what is this even for??  why is the first thing in the second tuple completely ignored?  why does it work in pairs?????
+--NOTE: this function seems to not actually do anything meaningful!!!!  WAS used above in (groupAtts downAtts)
+--NOTE: when used above in (groupAtts downAtts), only the case [(a,b)] was actually hit
+--NOTE: this is referenced in packAmb where the other cases ARE hit.  But that function seems broken?
+--NOTE: the first thing in the tuple would have been the instance, which would have been (I, id).
+--Were they guaranteed to be the same?  Was this an attempt to merge attributes from different rule_i?
+groupAtts []                    = []
+groupAtts [(a,b)]               = [(a,b)]
+groupAtts [(a,b),(_,b1)]       = [(a,b++b1)]
+groupAtts ((a,b):(_,b1):rest)  = (a,b++b1): groupAtts rest
+
+showTree (Branch ts) = "(" ++ concatMap showTree ts ++ ")"
+showTree (SubNode _) = "SubNode"
+showTree (Leaf _)    = "Leaf"
+
+--------------------------------------
+--TODO: optimize!
+--TODO: what should happen if same instance is repeated? error?
+--NOTE: yes, this is an error, but on the user's part.  this can happen if for example: (nt blah S0 *> nt ugh S0).  TODO: compile time error for this
+--NOTE: duplicate instances are IGNORED
+findAtts :: (Show att) => Tree att -> InsAttVals att
+--findAtts t = trace ("Tree: " ++ showTree t) $ findAtts' t
+findAtts (Branch ts)                  = Map.unions $ map findAtts ts
+findAtts (SubNode (_,((_,_),(v',v)))) = Map.union v' v --NOTE: v' are the inherited atts and v are the synthesized atts
+findAtts (Leaf _)                     = Map.empty
+
+--------------------------------------------------------
+
+--rule_i and rule_s both use the default AttName default_attname
+rule_i          = rule I
+rule_s          = rule S
+
+--TODO: more undefined...
+--seems that there's a basic error catch here: if the left hand side does not agree with the right hand side data constructor, then it should
+--not be defined by setAtt.  "typ undefined" is compared to resType, to see if the same data constructor was used.
+--Also, no matter the declared type, if the right hand side is ErrorVal, we get ErrorVal, full stop.
+--This thing has bitten me so many times... it would be nice to actually have it done right.
+--TODO: multiple rule_s are permitted, but the typ, the only disambiguating thing for rule differentation, is ignored.  Need to handle this.
+rule :: (Generic att, GConstructors (Rep att)) => SorI -> (a -> att) -> Useless -> Id -> Useless -> ([att] -> att) -> [(InsAttVals att, Id) -> att] -> (Instance, SemRule att)
+rule s_or_i typ oF pID isEq userFun listOfExp
+ =  let inst = (s_or_i,pID)
+        semRule = \atts -> let resType = userFun (map ($ atts) listOfExp)
+            in if constrName (typ undefined) == constrName resType
+                then resType
+                else error "rule: attribute name mismatch!"
+    in (inst,semRule)
+
+--TODO: should be able to automatically figure out att names.  Ideally, from a getter...
+--TODO: need to see about pre-applying atts to listOfExp (will require rule to take in the (InsAttVals att, Id) itself)
+--TODO: need to see about using T.Text with a hash (or hashing the String) instead of using the index -- may be better off not using generic-data (where gconName is flawed)
+--TODO: HashMap may perform better than IntMap
+--TODO: if we do use generic-data, need to update package.yaml to include it
+--TODO: need to benchmark!
+--NOTE: https://hackage.haskell.org/package/haskus-utils-types-1.5/docs/Haskus-Utils-Types-Generics.html
+--NOTE: https://hackage.haskell.org/package/postgresql-orm-0.1/docs/Data-GetField.html
+
+---- **** -----
+
+--synthesized and inherited both use the default AttName default_attname
+synthesized = valOf S
+inherited   = valOf I
+
+valOf :: (Generic att, GConstructors (Rep att)) => SorI -> (a -> att) -> Useless -> Id -> (InsAttVals att,Id) -> att
+valOf ud typ o_f x (ivs,x') | x == LHS   = getAttVals (ud , x') ivs typ --the inherited Id from parent? (there should be type level enforcement here)
+                            | otherwise  = getAttVals (ud , x ) ivs typ --the synthesized id? or inherited id from sibling? (there should be type level enforcement here)
+
+--TODO: Whoa!!!!  not cool!
+--This appears to be invoked if an Id is requested and not used
+--TODO: it seems that an instance may point to multiple different atts... may need to go back to the drawing board
+--NOTE: it looks like it just takes the first i == x and returns getAttVals_ for that.  no worry about duplicate instances here at least.
+getAttVals :: (Generic att, GConstructors (Rep att)) => Instance -> InsAttVals att -> (a -> att) -> att
+getAttVals x ivs typ = case Map.lookup x ivs of
+    Nothing -> error "getAttVals Instance not found!" --USER ERROR -- referring to an att that does not exist!
+    Just atts -> let cName = (constrName $ typ undefined) in case IntMap.lookup cName atts of
+        Nothing -> error $ "attribute name " ++ (show cName) ++ "not found!"
+        Just attVal -> attVal
+
+{-getAttVals x ((i,v):ivs) typ =
+ let getAttVals_ typ (t:tvs) = if (typ undefined) == t then (t :getAttVals_ typ tvs) --NOTE: linear search here too, perhaps we need to store attributes in a Map.Map (Instance,Type) [AttValue]? (recall multiple atts allowed)
+                               else getAttVals_ typ tvs
+     getAttVals_ typ []      = [] -- ErrorVal {-- 100 --} "ERROR id found but no value" (TODO: this appears to be a *legitimate* case that is NOT AN ERROR for inherited atts!!!  this was COMMENTED OUT IN THE ORIGINAL)
+ in
+     if(i == x) then getAttVals_ typ v else   getAttVals x ivs typ
+--getAttVals x [] typ          = [ErrorVal {-- 200 --} "ERROR no id"] --TODO: note, the error being reported would be here.  this is the ONLY case of error reporting...
+getAttVals x [] typ = error "ERROR no id"-}
+
+-------- ************************************** ------------
+
+------------------------- user functions ------------------
+--apply :: InsAttVals att -> Id -> (InsAttVals att -> Id -> AttValue) -> Int
+apply  y x   = getAVAL (x y)
+apply_ y x   = getB_OP (x y)
+
+--apply__ :: InsAttVals att -> Id -> (InsAttVals att -> Id -> AttValue) -> DisplayTree
+apply__ x  = getRVAL x
+
+--applyMax :: InsAttVals att -> Id -> (InsAttVals att,Id) -> AttValue) -> Int
+applyMax  x   = getAVAL (getMax (MaxVal 0) (x))
+--getMax :: AttValue -> AttValue -> AttValue
+getMax    x   y   = MaxVal  (max (getAVAL x) (getAVAL y))
+
+findMax spec = MaxVal (foldr max 0 (map (applyMax) spec))
+
+convertRep spec = RepVal (foldr max 0 (map (applyMax) spec))
+
+makeTree (x:xs) = Res (B (map (apply__) (x:xs)))
+
+mt :: [DisplayTree] -> DisplayTree
+mt [a,b,c] = (B [a,b,c])
+mt [a]     = (B [a])
+
+----------- for arithmetic expr -----------------
+applyBiOp [e1,op,e2] = VAL ((getB_OP $ op ) (getAVAL $ e1) (getAVAL $ e2))
+--getAtts :: (att -> a) -> (InsAttVals att, Id) -> (InsAttVals att -> Id -> Atts att) -> a
+--getAtts f (y,i) x = f (head (x y i))  --NOTE: this ignores all other matching atts?!  This should return a *list*, it clearly says *atts*!!!!
+--at the very least it should be called getFirstAtt or something
+
+--getAtts :: AttName -> (att -> a) -> (InsAttVals att, Id) -> (InsAttVals att -> Id -> att) -> a
+getAtts f x = f x
+
+getAtt :: (Generic att, GConstructors (Rep att)) => (a -> att) -> Atts att -> a
+getAtt dConstr atts = case IntMap.lookup (constrName $ dConstr undefined) atts of
+    Nothing -> error "getAtt: Attribute does not exist!"
+    Just att -> error "REMOVE ME"
+
+----------- general copy ------------------------
+copy [b] = b --NOTE: again, only the first att is returned!
+getTypVal :: Eq att => [(a -> att, att -> p)] -> att -> p --NOTE: this function is very unsafe, it has no base case.  Seems to apply a function to the first matching att.  It also does not seem to be used!
+getTypVal ((a,b):abs) t | a undefined == t = b t
+                        | otherwise        = getTypVal abs t
+
+
+----------- for arithmetic expr -----------------
+
+toTree :: [(InsAttVals AttValue,Id) -> AttValue] -> (InsAttVals AttValue, Id) -> AttValue
+toTree [b] atts = Res (N ((map (apply atts) [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]
+       ]
+      )
+
+--imagine: rule_i T1.RepVal := convertRep [inherited RepVal of LHS]
+
+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], --NOTE: seems that for inherited atts, the Ids may cause trouble if they're the same as the parent (T0 here)
+        rule_i RepVal OF T2   ISEQUALTO convertRep    [inherited RepVal OF LHS], --NOTE: you can inherit from siblings too
+        rule_i RepVal OF T3   ISEQUALTO convertRep    [inherited RepVal OF LHS]  --NOTE: possible to enter an infinite loop by referring to self
+       ]
+ <|>
+            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 "1" [MaxVal 1] <|>
+        terminal "2" [MaxVal 2] <|>
+        terminal "3" [MaxVal 3] <|>
+        terminal "4" [MaxVal 4] <|>
+        terminal "5" [MaxVal 5]
+       )
+------------------------------------------------ Arithmetic Expression ------------------------------------------------
+
+eT
+ = memoize ET
+   (
+   parser
+   (nt expr E1)
+   [rule_s MaxVal OF LHS ISEQUALTO copy [synthesized MaxVal OF E1]]
+   )
+
+--rule_s copy [synthesized E1]
+--rule_s := copy [synthesized E1]
+
+expr = memoize Expr
+       (
+        parser
+        (nt expr E1 *> nt op O1 *> nt expr E2)
+        [rule_s MaxVal OF LHS ISEQUALTO applyBiOp [synthesized MaxVal OF E1,
+                                             synthesized B_OP OF O1,
+                                            synthesized MaxVal OF E2]
+        ]
+
+        <|>
+        parser
+        (nt num N1)
+        [rule_s MaxVal OF LHS  ISEQUALTO copy [synthesized MaxVal OF N1]]
+       )
+
+op   = memoize Op
+       (
+    terminal "+" [B_OP (+)] <|>
+    terminal "-" [B_OP (-)] <|>
+    terminal "*" [B_OP (*)] <|>
+    terminal "/" [B_OP div]
+       )
+
+--The nastiest list comprehension I have ever seen in my life
+--The unformatted parse tree
+
+attsFinalAlt :: MemoL -> Int -> MemoTable att -> [[Atts att]]
+attsFinalAlt  key e t  =  maybe [] allTrees (Map.lookup (key,1) t)
+    where
+        allTrees (_,rs) = [ Map.elems synAtts | (((_,end),(_,synAtts)), _)<-rs, end == e]
+
+--Using a start, end, and memoization key, locate all valid parses that match.  In the case of ambiguity, there may be more than one result.
+--These three conditions are sufficient to guarantee the result is unique and valid.
+lookupTable :: MemoL -> Int -> Int -> MemoTable att -> [Tree att]
+lookupTable key start end t = maybe [] allTrees (Map.lookup (key,start) t)
+    where allTrees (_, results) = [ tree | (((_,_end),_), tree) <- results, end == _end]
+
+--The memo table itself must be "unravelled" to reveal the parse tree.  If there is only one valid parse, this is easy.
+--If there are multiple valid parses due to ambiguity, then we must return all valid trees.
+--But the problem is that the originator for a particular SubNode or Branch is lost during parsing -- only the differing AttValue is kept.
+--This is because this information isn't necessary to get a valid parse.
+--However, we'd sure like to have it.  Note that in ambiguity, there will be cases where the start, end, and key match and only the AttValue differs.
+--But this is not helpful to us, because we can't meaningfully compare those.
+--It should be possible to modify the code somehow to preserve this, but I'm not sure how, as it's very hard to read.
+--So, instead, produce a reduced memo table using eqAmb where ambiguous parses are reduced to 1 parse, discarding AttValue.
+--Then walk the tree recursively, branching off whenever the syntax tree starts to actually diverge to ensure we get the relevant info.
+--In other words, we have to just produce all unique trees we can that are valid parses and hope to god that we can recover the AttValues later somehow,
+--because there's no direct reference to where a particular AttValue came from.  If there are 3 possible AttValues from 3 ambiguous parses that could have yielded
+--an AttValue, then we have no way of knowing which one it actually was because start, end, and key will match for *all* of them.  Ouch.
+--NOTE: a Leaf is just a terminal, a Branch is a sequence of non-terminals and terminals, and a SubNode corresponds to a reference to a terminal or non-terminal.
+--Actually, I think that Branch may only have SubNodes, which makes it essentially a representation of a non-terminal.  This may have to do with the compact memory representation.
+--Anyway, only bother to put brackets in on Branches, as this is where the syntax tree does the real "splitting" it seems.
+--To "unpack" a SubNode, you must traverse the MemoTable and find the entry corresponding to the start, end, and key
+
+--But there is a problem with this.
+--NOTE: it looks like traversing this way will guarantee that the AttValues retrieved later during formatAttsFinalAlt will be in the same order as the returned trees
+--(so that the trees will map correspondingly to their attvalues).  But I haven't proved this at all!  It would be sure nice if the tree were embedded somehow in the actual parse.
+--TODO: guarantee this behaviour!
+data SyntaxTree = SyntaxTreeNT [SyntaxTree] | SyntaxTreeT T.Text deriving (Show)
+
+findAllParseTrees t (Leaf (ALeaf str, _)) = [SyntaxTreeT str]
+--SubNodes introduce ambiguity?
+findAllParseTrees t (SubNode ((key, _), ((_start, _end), _))) = let trees = nubBy eqAmb (lookupTable key _start _end t) in concatMap (findAllParseTrees t) trees
+--nubBy eqAmb necessary for Branch?  Ambiguity?
+findAllParseTrees t (Branch tree) = map SyntaxTreeNT $ sequence $ map (findAllParseTrees t) tree
+
+findAllParseTreesT' attName key end t = zip sems trees
+    where
+        sems = formatAttsFinalAlt attName key end t
+        trees = concat $ sequence $ map (findAllParseTrees t) $ nubBy eqAmb (lookupTable key 1 end t)
+
+findAllParseTreesFormatted formatTree attName key end t = map (\(x, y) -> (x, formatTree y)) $ findAllParseTreesT' attName key end t
+
+findAllParseTreesFormatted' = findAllParseTreesFormatted syntaxTreeToLinearGeneric'
+
+--Compare trees up until Atts.  We're looking for a syntactic match and cannot compare atts meaningfully.
+eqAmb :: Tree att -> Tree att -> Bool
+eqAmb (Leaf x) (Leaf y) = x == y
+eqAmb (SubNode (mInst,(startEnd,_))) (SubNode (mInst2,(startEnd2,_))) = mInst == mInst2 && startEnd == startEnd2
+eqAmb (Branch []) (Branch []) = True
+eqAmb (Branch (x:xs)) (Branch (y:ys)) = eqAmb x y && eqAmb (Branch xs) (Branch ys)
+eqAmb _ _ = False
+
+--the rules:
+--brackets are collapsed
+--expressions are separated by spaces
+
+shouldSpaceGeneric x y = isWord x && isWord y || isWord x && isOpeningBracket y || isClosingBracket x && isWord y || isClosingBracket x && isOpeningBracket y
+        where
+            isBracket x = x == "(" || x == ")"
+            isClosingBracket x = x == ")"
+            isOpeningBracket x = x == "("
+            isWord x = not $ isBracket x
+
+intercalateBracketsGeneric [] = ""
+intercalateBracketsGeneric (x:y:xs) | shouldSpaceGeneric x y = x `T.append` " " `T.append` intercalateBracketsGeneric (y:xs)
+intercalateBracketsGeneric (x:xs) = x `T.append` intercalateBracketsGeneric xs
+
+syntaxTreeToLinearGeneric :: SyntaxTree -> [T.Text]
+syntaxTreeToLinearGeneric (SyntaxTreeT x) = [x]
+syntaxTreeToLinearGeneric (SyntaxTreeNT ts) = ["("] ++ concatMap syntaxTreeToLinearGeneric ts ++ [")"]
+
+syntaxTreeToLinearGeneric' :: SyntaxTree -> T.Text
+syntaxTreeToLinearGeneric' (SyntaxTreeT x) = x
+syntaxTreeToLinearGeneric' (SyntaxTreeNT ts) = intercalateBracketsGeneric $ concatMap syntaxTreeToLinearGeneric ts
+
+--WIP
+diffTree :: SyntaxTree -> SyntaxTree -> [SyntaxTree]
+diffTree (SyntaxTreeT t1) a@(SyntaxTreeT t2) = if t1 == t2 then [] else [a]
+diffTree (SyntaxTreeT t1) a@(SyntaxTreeNT ts2) = [a]
+diffTree (SyntaxTreeNT ts1) a@(SyntaxTreeT t2) = [a]
+diffTree (SyntaxTreeNT []) (SyntaxTreeNT xs)= xs
+diffTree (SyntaxTreeNT xs) (SyntaxTreeNT []) = []
+diffTree (SyntaxTreeNT (t1:ts1)) a@(SyntaxTreeNT (t2:ts2)) = diffTree t1 t2 ++ diffTree (SyntaxTreeNT ts1) (SyntaxTreeNT ts2)
+--need edit distance...
+
+--a moon spins = SyntaxTreeNT [SyntaxTreeT "a", SyntaxTreeT "moon", SyntaxTreeT "spins"]
+--discover (a moon) = SyntaxTreeNT [SyntaxTreeT "discover", SyntaxTree NT[SyntaxTreeT "a", SyntaxTree "moon"]]
+
+--The unformatted flattened parse trees
+formatAttsFinalAlt :: (Generic att, GConstructors (Rep att)) => (a -> att) -> MemoL -> Int -> MemoTable att -> [att]
+formatAttsFinalAlt typ key e t = let attName = constrName $ typ undefined in map (fromJust . IntMap.lookup attName) $ concat $ attsFinalAlt key e t
+
+meaning_of :: NTType att -> T.Text -> MemoL -> [att]
+meaning_of p dInp key
+ = let dInput     = Vector.fromList $ T.words dInp
+       appParser  = runState (p T0 empty_insattvals (1, dInput) empty_cuts) Map.empty
+       upperBound = (length dInput) + 1
+   in  formFinal key upperBound (snd $ appParser)
+
+meaning_of_ :: NTType att -> T.Text -> MemoL -> MemoTable att
+meaning_of_ p dInp key
+ = let dInput     = Vector.fromList $ T.words dInp
+       appParser  = runState (p T0 empty_insattvals (1, dInput) empty_cuts) Map.empty
+       upperBound = (length dInput) + 1
+   in  (snd $ appParser)
+
+--TODO: these are the same?!!
+formAtts key ePoint t = maybe [] allAtts $ Map.lookup key t
+        where allAtts sr = concat $ concat $ concat [[[  val1 |(id1,val1)<-synAtts]
+                                                    |(((st,end),(inAtt2,synAtts)), ts)<-rs, st == 1 && end == ePoint]
+                                                    |(i,((cs,ct),rs)) <- sr ]
+
+formFinal :: MemoL -> Int -> MemoTable att -> [att]
+formFinal key ePoint t = maybe [] final $ Map.lookup (key,1) t
+    where final (_,rs) =  IntMap.elems $ IntMap.unions $ concat $ [Map.elems synAtts --TODO: IntMap.unions may overwrite atts?  we ought to be careful here
+                                                    |(((st,end),(inAtt2,synAtts)), ts)<-rs, end == ePoint] --NOTE: start does not need to be checked because the rule encompasses the entire string
+
+--test1 p p_ inp = do putStr  $ render80 $ format{-Atts p_-} $ snd $ runState (p T0 [] ((1,[]),words inp) ([],[])) []
+test :: M att
+    -> Vector.Vector T.Text
+    -> ((ParseResult att), MemoTable att)
+test p input = runState (p (1,input) empty_cuts) Map.empty
+--NOTE: above, (1,[]) is a Start1 and ((1,[]),input) is a Start.  The Start1 corresponds to the inherited atts to begin with?  But those are also supplied in p.
+--      context always starts empty.
+
+--formatParseIO = mapM id . map showio . parse
+
+findStart st ((s,ss):rest) | s == st   = [(s,ss)]
+                           | otherwise = findStart st rest
+findStart st []                        = []
diff --git a/src/XSaiga/CGI.hs b/src/XSaiga/CGI.hs
new file mode 100644
--- /dev/null
+++ b/src/XSaiga/CGI.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE DoAndIfThenElse #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE DeriveGeneric #-}
+
+module XSaiga.CGI where
+import qualified XSaiga.SolarmanTriplestore as App
+import Network.FastCGI
+import qualified Data.List as List
+import Data.Text as T
+import qualified Data.Text.Lazy as TL
+import qualified Data.ByteString.Lazy.Char8 as BLIO
+import qualified Data.ByteString.Lazy as BL
+import qualified Data.ByteString as BS
+import Data.Text.Encoding as E
+import Data.Text.Lazy.Encoding as EL
+
+#ifdef INSTORE
+import qualified XSaiga.LocalData as Local
+#endif
+
+#ifndef INSTORE
+--For caching name lookup
+import qualified Network.Socket as Net
+#endif
+
+import qualified XSaiga.Getts as Getts
+import qualified XSaiga.TypeAg2 as TypeAg2
+import qualified Control.Monad.State.Strict as State
+import qualified Data.Map.Strict as Map
+import qualified Control.Monad as M
+import qualified XSaiga.ShowText as ShowText
+
+import qualified Data.Aeson as Aeson
+import qualified Data.Aeson.Text as AesonText
+
+import Data.Maybe
+
+import GHC.Generics
+
+data XSaigaResult = XSaigaResult {
+    res :: T.Text,
+    syntax :: T.Text
+} deriving (Generic, Show)
+
+data XSaigaConversationResult = XSaigaConversationResult {
+    resConversation :: T.Text
+} deriving (Generic, Show)
+
+data XSaigaParseError = XSaigaParseError {
+    resError :: T.Text
+} deriving (Generic, Show)
+
+instance Aeson.ToJSON XSaigaResult where
+    toEncoding = Aeson.genericToEncoding Aeson.defaultOptions
+
+instance Aeson.ToJSON XSaigaConversationResult where
+    toEncoding = Aeson.genericToEncoding Aeson.defaultOptions
+
+instance Aeson.ToJSON XSaigaParseError where
+    toEncoding = Aeson.genericToEncoding Aeson.defaultOptions
+
+cgiMain :: (Getts.TripleStore m) => m -> CGI CGIResult
+cgiMain dataStore = do
+    query <- getInputFPS "query"
+    case query of
+      Nothing -> outputFPS $ EL.encodeUtf8 "error"
+      Just input -> do
+        out <- liftIO $ interpret' dataStore (E.decodeUtf8 $ BL.toStrict input)
+        setHeader "Content-type" "text/plain; charset=utf-8"
+        outputFPS out
+
+namespace_uri = "http://solarman.richard.myweb.cs.uwindsor.ca#"
+endpoint_uri = "speechweb2.cs.uwindsor.ca/sparql"
+
+--Asterius requires https
+asteriusRemoteData = Getts.SPARQL ("https://" ++ endpoint_uri) namespace_uri
+--CGI requires http (Network.FastCGI limitation)
+cgiRemoteData = Getts.SPARQL ("http://" ++ endpoint_uri) namespace_uri
+
+--Inside an #ifdef to avoid the network-based dependencies, helps keep size down for completely offline builds
+main :: IO ()
+#ifdef INSTORE
+main = do
+    runFastCGIorCGI (handleErrors $ cgiMain Local.localData) --No need to resolve anything
+#else
+main = do --For CGI, not Asterius
+    resolved_endpoint <- resolveEndpoint cgiRemoteData
+    runFastCGIorCGI (handleErrors $ cgiMain resolved_endpoint)
+    where
+        resolveEndpoint (Getts.SPARQL url namespace_uri) = do
+            x <- Net.getAddrInfo Nothing (Just $ getServer url) (Just "http") --Network.FastCGI requires plain HTTP :(
+            return $ Getts.SPARQL (newURL (showAddress x) (getURLPath url)) namespace_uri
+            where
+                getServer = List.takeWhile (\x -> not $ x `elem` ['/']) . List.drop 7 --drop the "http://" part and take until the first "/" character
+                showAddress = show . Net.addrAddress . List.head
+                getURLPath xs = List.drop (7 + (List.length $ getServer xs)) xs
+                newURL server path = "http://" ++ server ++ path
+#endif
+
+interpret "ask them to be quiet"
+     = Just $ "Hello. Quiet please. My "
+       `T.append` "masters are going to talk. Quiet please."
+
+interpret "introduce yourself solar man"
+     =  Just $ "Hello. Hello. My name is Solar man."
+        `T.append` " Thank you for coming to my party."
+        `T.append` " I am very pleased to meet you."
+
+interpret "what can i say"
+      = Just $ "You can say. hello there. what is your name."
+        `T.append` " you can ask me about the moons and the planets."
+    `T.append` " such as, who discovered a moon."
+    `T.append` " who discovered two moons."
+    `T.append` " which moons were discovered by kuiper."
+    `T.append` " who discovered phobos."
+    `T.append` " which planet is orbited by miranda."
+    `T.append` " how many moons orbit saturn."
+    `T.append` " and other similar questions."
+        `T.append` " who are you. where do you live."
+        `T.append` " tell me a joke. who made you."
+        `T.append` " who do you know. what is your favorite band."
+        `T.append` " who is the vice president at the university of windsor."
+        `T.append` " who is the president at the university of windsor."
+        `T.append` " who is the dean of science at the university of windsor."
+
+interpret "hi"              = Just $ "Hi there. My name is solar man"
+interpret "hello"           = Just $ "hello. My name is solar man."
+interpret "hello there"     = Just $ "Good day to you"
+interpret "hello solar man" = Just $ "hello. How are you"
+interpret "goodbye"         = Just $ "goodbye. See you in the stars."
+interpret "goodbye solar man" = interpret "goodbye"
+interpret "fine thanks" = Just $ "Good, so am I. Except for a bit of back ache"
+interpret "thanks" = Just $ "you are welcome"
+interpret "thanks solar man" = Just $ "you are most welcome"
+interpret "yes please" = Just $ "yes please? What did you want? My memory is getting bad"
+interpret "what is your name" = Just $ "My name is solar man."
+interpret "who are you"
+   = Just $ "My name is solar man. I know about the planets and the"
+     `T.append` " moons, and the people who discovered them"
+interpret "where do you live"
+    = Just $ "I live in a dark cold computer. "
+       `T.append` "The center of my universe is Lambton Tower, at the University of Windsor."
+interpret "what do you know"
+   = Just $ "Not much I am afraid. I am just beginning to learn. I know a bit about "
+     `T.append` "the planets, the moons, and the people who discovered them. "
+     `T.append` "My master will teach me some more when he gets another grant "
+interpret "how old are you"
+  = Just $ "older than you think. And much older than my friends Judy and Monty."
+interpret "who made you"
+   = Just $ "I. B. M. and Opera Software made my ears and vocal chords. William Ma connected my "
+     `T.append` "ears to my brain, and Doctor Frost, master of the universe, made "
+     `T.append` "my brain"
+
+interpret "what is your favorite band"
+   = Just $ "Pink Floyd. I love, Dark Side of the Moon"
+
+interpret "who is the vice president at the university of windsor"
+  =Just $ "Douglas Kneale"
+
+interpret "who is the president at the university of windsor"
+  = Just $ "Doctor Robert Gordon."
+
+interpret "who is the dean of science at the university of windsor"
+  = Just $ "Doctor Chris Houser"
+
+interpret "tell me a poem" = Just $ "do not know any poems. But my friend, Judy, does"
+
+
+interpret "know any poems" = Just $ "no but my friend, Judy does;"
+
+
+interpret "tell me a joke"
+    = Just $ "did you hear about the Computer Scientist who thought his computer"
+      `T.append` "was a car. He had a hard drive home every day"
+
+interpret "know any jokes"
+       = Just $ "just one. My friend Monty knows one too."
+
+interpret "who is judy" = Just $ "She is my friend. She knows about poetry"
+
+interpret "who is monty"
+   = Just $ "Monty is my friend. He is a student"
+     `T.append` " at the university of Windsor."
+
+{-
+interpret "can I talk to judy"
+              ="yes. here she is"
+                `T.append` "<goto>http://cs.uwindsor.ca/~speechweb/p_d_speechweb/judy/judy.xml</goto>"
+
+interpret "can I talk to monty"
+              ="yes. here he is"
+                `T.append` "<goto>http://cs.uwindsor.ca/~speechweb/p_d_speechweb/monty/monty.xml</goto>"
+
+interpret "can I talk to solar man"
+              ="yes. here he is"
+                `T.append` "<goto>http://cs.uwindsor.ca/~speechweb/p_d_speechweb/solarman/solarman.xml</goto>"
+
+-}
+
+interpret "who do you know" = Just $ "i only know three people. Judy, Monty, and Solarman."
+
+interpret _ = Nothing
+
+interpret'' = TypeAg2.getQUVAL . List.head . App.parse
+
+--TODO: multiple interpretations!  need to optimize these!
+interpret' dataStore input = do
+    let firstpass = interpret input
+    case firstpass of
+        Nothing -> do
+            let attTrees = App.parseTree input
+            let atts = Prelude.map fst attTrees
+            let trees = Prelude.map snd attTrees
+            let sems = List.map TypeAg2.getQUVAL atts
+            --outs <- mapM evaluate interpretations --TODO: this is a code smell -- needs to be abstracted -- looks like SemFunc
+            let flatQueries = Prelude.foldr mergeFlat ([],[],[]) sems
+            let optQueries = TypeAg2.flatOptimize flatQueries
+            rtriples <- TypeAg2.getReducedTriplestore dataStore optQueries
+            (outs, _) <- M.foldM (nextInterp rtriples) ([], Map.empty) sems --TODO: save the state for later?  paper opportunity
+            if List.null attTrees
+                then return $ Aeson.encode $ XSaigaParseError "Do not know that one yet, will work on it tonight"
+                else return $ Aeson.encode $ List.zipWith XSaigaResult outs trees
+        Just result -> return $ Aeson.encode $ XSaigaConversationResult result
+    where
+        mergeFlat interp flatGetts = let g = TypeAg2.getGetts interp in TypeAg2.merge (TypeAg2.flattenGetts g) flatGetts
+        nextInterp rtriples (txt, state) interp = do --TODO: improves by about 2 seconds on heavy workloads -- could be better!
+            (out, nState) <- evaluate rtriples interp state
+            return (txt ++ [out], nState)
+
+evaluate rtriples interp startState = do
+  return $ State.runState (TypeAg2.getSem interp rtriples) startState
+
+--TODO: needs to use resolved_endpoint URI?  or refactored as LocalData/SPARQL/etc
+runQuery dataStore interp = do
+    let g = TypeAg2.getGetts interp
+    let flatQueries = TypeAg2.flattenGetts g
+    let optQueries = TypeAg2.flatOptimize flatQueries
+    rtriples <- TypeAg2.getReducedTriplestore dataStore optQueries
+    (out, _) <- evaluate rtriples interp Map.empty
+    return out
+
+interpret''' dataStore input = interpret' dataStore input >>= BLIO.putStrLn
diff --git a/src/XSaiga/Getts.hs b/src/XSaiga/Getts.hs
new file mode 100644
--- /dev/null
+++ b/src/XSaiga/Getts.hs
@@ -0,0 +1,321 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE NoMonomorphismRestriction #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE DeriveGeneric #-}
+
+module XSaiga.Getts where
+import Data.List as List
+import qualified Data.Text as T
+import Control.Monad
+import Debug.Trace
+
+--For slow collect
+import qualified Data.Map.Strict as Map
+
+--For endpoint query
+import Data.RDF.Types hiding (triple, Triple)
+import Database.HSparql.Connection
+import Database.HSparql.QueryGenerator as HSparql
+
+import qualified Data.Map as M
+import Data.IORef
+
+import Debug.Trace
+import GHC.Generics
+import Data.Aeson
+
+import qualified Data.Text.Read as TR
+
+--If Asterius is being used, override selectQuery with our own implementation
+#ifdef ASTERIUS
+import Asterius.Aeson
+import Asterius.ByteString
+import Asterius.Text
+import Asterius.Types
+
+import qualified Data.Text.IO as TIO
+import qualified System.IO as SIO
+#endif
+
+type Cardinality = Int --if we need more than 2 billion entities, we can change this
+
+#ifdef ASTERIUS
+foreign import javascript safe "getts_sparql($1,$2)" asterius_getts_sparql :: JSString -> JSString -> IO JSString
+
+foreign import javascript safe "getts_triples_entevprop_type($1,$2,$3)" asterius_getts_triples_entevprop_type :: JSVal -> JSArray -> JSString -> IO JSArray
+
+--Needs to take in endpoint, namespace uri, preferably as JSON object.  Then needs to take in a set name.
+--need to de-namespace here, not in the function?
+--may be able to use hsparql's direct XML parsing functionality to save a bit of work
+--better yet, do the work in Javascript and return the list of triples directly!!!
+foreign import javascript safe "getts_triples_members($1,$2)" asterius_getts_triples_members :: JSVal -> JSString -> IO JSArray
+
+foreign import javascript safe "getts_cardinality_allents($1,$2)" asterius_getts_cardinality_allents :: JSVal -> JSArray -> IO JSVal
+
+--TODO: the following is the preferred way to use Asterius, but it does not work yet
+
+{-
+gettsSelectQuery :: String -> Query SelectQuery -> IO (Maybe [[BindingValue]])
+gettsSelectQuery endpoint query = do
+    js_triples_xml <- asterius_getts_sparql (toJSString endpoint) (toJSString $ createSelectQuery query)
+    --SIO.putStrLn $ createSelectQuery query --This is crashing!
+    return $ structureContent $ fromJSString $ js_triples_xml
+-}
+#else
+
+gettsSelectQuery = selectQuery
+#endif
+
+addUri namespace_uri = (T.append namespace_uri)
+
+type Event = T.Text
+type Triple = (Event, T.Text, T.Text) --TODO: use Data.RDF representation?
+type FDBR = [(T.Text,[Event])]
+type GFDBR = [(T.Text, FDBR)]
+
+--getts returns all triples in the triple store that match the given parameters
+class TripleStore m where
+    getts_triples_entevprop_type :: m -> [T.Text] -> T.Text -> IO [Triple]
+
+    getts_triples_members :: m -> T.Text -> IO [Triple]
+
+    getts_cardinality_allents :: m -> [T.Text] -> IO Int --gets #entities from triplestore
+
+sortFirst = sortBy (\x y -> compare (fst x) (fst y))
+
+--TODO: This is DANGEROUS.  Needs refactoring.
+make_fdbr_with_prop :: [Triple] -> T.Text -> FDBR
+make_fdbr_with_prop ev_data entity_type
+  = collect $ map (\(x, _, z) -> (z, x)) $ List.filter (\(x, y, z) -> y == entity_type) ev_data
+
+getts_1 ev_data ("?", b, c) = [x | (x,y,z) <- ev_data, b == y, c == z]
+getts_2 ev_data (a, "?", c) = [y | (x,y,z) <- ev_data, a == x, c == z]
+getts_3 ev_data (a, b, "?") = [z | (x,y,z) <- ev_data, a == x, b == y]
+
+--TODO: needs serious refactoring... divergence big time
+
+--For the "In Program" triple store -- whole typeclass needs refactoring!
+instance TripleStore [Triple] where
+    getts_triples_entevprop_type ev_data propNames ev_type = do
+      let evs_with_type_ev_type = getts_1 ev_data ("?", "type", ev_type)
+      getts_triples_entevprop ev_data propNames evs_with_type_ev_type
+        where
+            getts_triples_entevprop ev_data propNames evs =
+                return $ List.filter (\(ev, prop, _) -> ev `elem` evs && prop `elem` ("type":propNames)) ev_data
+
+    --TODO: can getts_triples_members just be implemented in terms of getts_triples_entevprop_type?
+    --getts_triples_members ev_data set = getts_triples_entevprop_type ev_data ["subject", "object"] "membership"
+    --yes.  Actually, triplestore retrieval really only needs getts_triples_entevprop_type.
+    --but note this increases bandwidth requirements as the entire membership relation is needed
+    --perhaps could extend _type with a constraint in the future?
+    --the pure functions still need all three, I think (maybe not _members...)
+
+    getts_triples_members ev_data set = do
+      let evs_with_set_as_object = getts_1 ev_data ("?", "object", set)
+      let evs_with_type_membership = getts_1 ev_data ("?", "type", "membership")
+      let evs = intersect evs_with_set_as_object evs_with_type_membership
+      --TODO: abstract triple filtering mechanism for events and ev_types
+      let triples = [(x, y, z) | (x, y, z) <- ev_data, x `elem` evs]
+      return $ triples
+
+    getts_cardinality_allents ev_data props = do
+        let propEvs = [(x, y, z) | (x, y, z) <- ev_data, y `elem` props]
+        return $ List.length $ propEvs
+
+--TODO: note, the pure versions do NOT need to include type information
+--TODO: ev_data should come last, not first
+pure_getts_triples_entevprop_type ev_data propNames ev_type =
+  pure_getts_triples_entevprop ev_data propNames evs_with_type_ev_type
+  where
+    evs_with_type_ev_type = getts_1 triples ("?", "type", ev_type)
+    triples = fst ev_data
+
+pure_getts_triples_entevprop (triples,_) propNames evs
+  = List.filter (\(ev, prop, _) -> ev `elem` evs && prop `elem` propNames) triples
+
+pure_getts_members (triples,_) set = collect $ setRel
+  where
+    evs_with_set_as_object = getts_1 triples ("?", "object", set)
+    evs_with_type_membership = getts_1 triples ("?", "type", "membership")
+    evs = intersect evs_with_set_as_object evs_with_type_membership
+    setRel = [(z, x) | (x, y, z) <- triples, x `elem` evs, "subject" == y]
+
+
+data SPARQLBackend = SPARQL {sparqlEndpoint :: String, sparqlNamespace :: T.Text} deriving (Generic)
+instance ToJSON SPARQLBackend where
+    toEncoding = genericToEncoding defaultOptions
+
+instance FromJSON SPARQLBackend
+
+--TODO: can't use hsparql with asterius for unknown reason, likely a compiler error
+#ifdef ASTERIUS
+
+instance TripleStore SPARQLBackend where
+    --These need to use the asterius_getts_sparql function... or perhaps, we could cook something else up right in Javascript
+    --I imagine there are Javascript libraries to do SPARQL queries, after all!
+    getts_triples_entevprop_type triplestore@(SPARQL endpoint namespace_uri) propNames ev_type = do
+        js_bindings_array <- asterius_getts_triples_entevprop_type (jsonToJSVal triplestore) (toJSArray $ map jsonToJSVal propNames) (textToJSString ev_type)
+        let js_bindings = fromJSArray js_bindings_array
+        let bindings = map (\x -> jsonFromJSVal' x :: (T.Text, T.Text, T.Text)) js_bindings
+        return $ List.concatMap (\(ev,prop,ent) -> [(ev, "type", ev_type), (ev, prop, ent)]) bindings
+
+    getts_triples_members triplestore@(SPARQL endpoint namespace_uri) set = do
+        js_bindings_array <- asterius_getts_triples_members (jsonToJSVal triplestore) (textToJSString set)
+        let js_bindings = fromJSArray js_bindings_array
+        let bindings = map (\x -> jsonFromJSVal' x :: (T.Text, T.Text)) js_bindings
+        --now we have the [(ev,ent)] bindings from before, already de-namespaced and deconstructed in javascript
+        return $ List.concatMap (\(ev,ent) -> [(ev, "type", "membership"), (ev, "subject", ent), (ev, "object", set)]) bindings
+
+    getts_cardinality_allents triplestore@(SPARQL endpoint namespace_uri) propNames = do
+        x <- asterius_getts_cardinality_allents (jsonToJSVal triplestore) (toJSArray $ map jsonToJSVal propNames)
+        let count = jsonFromJSVal' x :: Cardinality
+        return $ count
+
+    {-getts_triples_members triplestore@(SPARQL endpoint namespace_uri) set = do
+        js_triples_xml <- asterius_getts_triples_members triplestore set
+        return $ case structureContent $ fromJSString $ js_triples_xml of
+            Just res -> Prelude.concatMap (\[ev, ent] ->
+          [(removeUri namespace_uri $ deconstruct ev, "type", "membership"),
+          (removeUri namespace_uri $ deconstruct ev, "subject", removeUri namespace_uri $ deconstruct ent),
+          (removeUri namespace_uri $ deconstruct ev, "object", set)]) res
+            Nothing -> []-}
+
+#else
+--the String in this instance is to be the endpoint that you wish to query
+instance TripleStore SPARQLBackend where
+    getts_triples_entevprop_type (SPARQL endpoint namespace_uri) propNames ev_type = do
+      m <- gettsSelectQuery endpoint query
+      case m of
+        (Just res) -> return $ List.concatMap (\[x, y, z] -> [(removeUri namespace_uri $ deconstruct x, "type", ev_type), (removeUri namespace_uri $ deconstruct x, removeUri namespace_uri $ deconstruct y, removeUri namespace_uri $ deconstruct z)]) res
+        Nothing -> return []
+      where
+        query :: Query SelectQuery
+        query = do
+          sol <- prefix "sol" (iriRef namespace_uri)
+          ev <- var
+          prop <- var
+          ent <- var
+          triple ev prop ent
+          triple ev (sol .:. "type") (sol .:. ev_type)
+          filterExpr $ List.foldr1 (.||.) $ map ((prop .==.) . (sol .:. )) propNames --type required here as this is not an FDBR
+          selectVars [ev, prop, ent]
+
+    getts_triples_members (SPARQL endpoint namespace_uri) set = do
+      m <- gettsSelectQuery endpoint query
+      case m of
+        (Just res) -> return $ Prelude.concatMap (\[ev, ent] ->
+          [(removeUri namespace_uri $ deconstruct ev, "type", "membership"),
+          (removeUri namespace_uri $ deconstruct ev, "subject", removeUri namespace_uri $ deconstruct ent),
+          (removeUri namespace_uri $ deconstruct ev, "object", set)]) res
+        Nothing -> return []
+      where
+        query :: Query SelectQuery
+        query = do
+          sol <- prefix "sol" (iriRef namespace_uri)
+          ev <- var
+          ent <- var
+          triple ev (sol .:. "type") (sol .:. "membership")
+          triple ev (sol .:. "subject") ent
+          triple ev (sol .:. "object") (sol .:. set)
+          selectVars [ev, ent]
+
+    getts_cardinality_allents (SPARQL endpoint namespace_uri) propNames = do
+        m <- gettsSelectQuery endpoint query
+        case m of
+            Just res -> return $ deconstruct_card $ head $ head res
+            Nothing -> error "could not obtain cardinality"
+        where
+            query :: Query SelectQuery
+            query = do
+                sol <- prefix "sol" (iriRef namespace_uri)
+                ev <- var
+                prop <- var
+                ent <- var
+                triple ev prop ent
+                filterExpr $ List.foldr1 (.||.) $ map ((prop .==.) . (sol .:. )) propNames --type required here as this is not an FDBR
+                c <- var
+                distinct
+                HSparql.select [count ent `as` c]
+#endif
+    --Used to return FDBR directly
+    --Efficient implementation of getts_members for SPARQL backend
+    {-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 "sol" (iriRef namespace_uri)
+                    ev <- var
+                    subj <- var
+                    triple ev (sol .:. "type") (sol .:. "membership")
+                    triple ev (sol .:. "subject") subj
+                    triple ev (sol .:. "object") (sol .:. set)
+                    orderNext subj
+                    distinct
+                    selectVars [subj, ev]
+    -}
+
+removeUri :: T.Text -> T.Text -> T.Text
+removeUri namespace_uri = T.drop $ T.length namespace_uri
+
+preprocess :: T.Text -> IO [[BindingValue]] -> IO [T.Text]
+preprocess namespace_uri bvals = bvals >>= \x -> return $ map (removeUri namespace_uri . deconstruct) $ concat x
+
+
+deconstruct :: BindingValue -> T.Text
+deconstruct value = do
+    let (Bound node) = value
+    case node of
+        UNode strURI -> strURI
+        LNode (PlainL strLit) -> strLit
+
+deconstruct_card :: BindingValue -> Int
+deconstruct_card  (Bound (LNode (TypedL strLit "http://www.w3.org/2001/XMLSchema#integer"))) = let (Right (x,_)) = TR.decimal strLit in x
+deconstruct_card _ = error "Attempted to deconstruct a non-integer"
+
+{-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
+collect = Map.toList . Map.fromListWith (++) . map (\(x, y) -> (x, [y]))
+
+--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)
+
+condense = map (\list -> (fst $ head list, map snd list)) . List.groupBy cmp
+  where
+  cmp x y = (fst x) == (fst y)
+
+--alias for getts_fdbr_entevprop_type
+--make_fdbr :: (TripleStore m) => m -> Text -> Text -> IO FDBR
+--make_fdbr = getts_fdbr_entevprop_type
+
+
diff --git a/src/XSaiga/LocalData.hs b/src/XSaiga/LocalData.hs
new file mode 100644
--- /dev/null
+++ b/src/XSaiga/LocalData.hs
@@ -0,0 +1,4137 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module XSaiga.LocalData where
+
+import Data.Text
+
+--Perhaps should use map...
+localData :: [(Text, Text, Text)]
+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")]
diff --git a/src/XSaiga/ShowText.hs b/src/XSaiga/ShowText.hs
new file mode 100644
--- /dev/null
+++ b/src/XSaiga/ShowText.hs
@@ -0,0 +1,25 @@
+module XSaiga.ShowText where
+
+import Data.Text
+{-import Data.Text.Lazy (toStrict)
+import Data.Text.Lazy.Builder (toLazyText)
+import Data.Text.Lazy.Builder.Int (decimal)
+import Data.Text.Lazy.Builder.RealFloat (realFloat)
+
+class ShowText a where
+    tshow :: a -> Text
+
+instance ShowText Int where
+    tshow = toStrict . toLazyText . decimal
+
+instance ShowText Float where
+    tshow = toStrict . toLazyText . realFloat
+
+instance ShowText Text where
+    tshow = id
+
+
+-} --TODO: when TH works on ARM, use text-show
+
+tshow :: (Show a) => a -> Text
+tshow = pack . show
diff --git a/src/XSaiga/SolarmanTriplestore.hs b/src/XSaiga/SolarmanTriplestore.hs
new file mode 100644
--- /dev/null
+++ b/src/XSaiga/SolarmanTriplestore.hs
@@ -0,0 +1,2494 @@
+{-# LANGUAGE NoMonomorphismRestriction #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE BangPatterns #-}
+
+module XSaiga.SolarmanTriplestore where
+
+import Prelude hiding ((*>), words, unwords, concat, concatMap, null)
+import XSaiga.Getts
+import Data.List as List hiding (words, unwords)
+import qualified Data.Text as T
+import qualified Data.Text.Read as TR
+import qualified Data.Set as Set
+import XSaiga.AGParser2 hiding (Result)
+import XSaiga.TypeAg2
+import Control.Monad
+import Debug.Trace
+import XSaiga.ShowText
+import Control.Applicative hiding ((*>), (<|>))
+import Data.Biapplicative
+import Data.Bifunctor
+import qualified Data.Map.Strict as Map
+import qualified Data.HashMap.Lazy as HashMap
+import Control.Monad.State.Strict
+import qualified Data.Ord as Ord
+import qualified Data.Maybe as Maybe
+import Data.Foldable
+import qualified Data.Vector as Vector
+
+--copied from gangster_v4: utility functions for making lists unique
+subset s t = (s \\ t) == []
+
+--TODO: MERGE IMAGES PROPER
+
+--copied from gangster_v4: combinators
+termor' :: SemFunc ((TF Result -> TF Result) -> (TF Result -> TF Result) -> TF Result -> TF Result)
+termor' = (liftA2 . liftA2 $ union_result'') >|< liftA2 (GettsUnion GU_NounOr)
+
+termor :: (TFMemo Result -> TFMemo Result) -> (TFMemo Result -> TFMemo Result) -> TFMemo Result -> TFMemo Result
+termor = liftA2 $ wrapS2 $ (liftA2 union_result'') >|< (GettsUnion GU_NounOr)
+--termor = liftA2 union_fdbr
+
+--see MSc thesis for explanation of why termand is in terms of termor
+--NOTE: these are actually two termphrases applied already to their arguments
+--e.g., "hall and galileo spin" => "hall spins and galileo spins", which is true if both are non-empty
+--following convention of sentjoin
+termand''' :: FDBR -> FDBR -> FDBR
+termand''' nph vbph = if not (List.null $ nph) && not (List.null $ vbph) then union_fdbr nph vbph else []
+
+--NOTE: this looks a lot like sentand/sentor
+termand'' :: CardinalityFunction -> Result -> Result -> Result
+termand'' cardinality nph vbph = if cardinality nph > 0 && cardinality vbph > 0 then union_result'' nph vbph else FDBR []
+--termand''' nph vbph  --"spins" is the applied argument to both termphrases
+--"not spins" is the applied argument to both termphrases, nph is set, vbph is comp (hall, not galileo)
+--"not spins" is the applied argument to both termphrases, nph is comp, vbph is set
+--"not spins" is the applied argument to both termphrases, both comp (not hall, not galileo)
+
+--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
+termand' :: SemFunc ((TF Result -> TF Result) -> (TF Result -> TF Result) -> TF Result -> TF Result)
+termand' = (liftA2 . applyCard $ termand'') >|< liftA2 (GettsUnion GU_NounAnd)
+
+termand :: (TFMemo Result -> TFMemo Result) -> (TFMemo Result -> TFMemo Result) -> TFMemo Result -> TFMemo Result
+termand = liftA2 $ wrapS2 $ (applyCard termand'') >|< (GettsUnion GU_NounAnd)
+
+nounnot'' :: Result -> Result
+nounnot'' nph = case nph of
+    FDBR a -> ComplementFDBR a
+    ComplementFDBR a -> FDBR a
+
+nounnot' :: SemFunc (TF Result -> TF Result)
+nounnot' = liftA nounnot'' >|< GettsComplement
+
+nounnot = wrapS1 $ nounnot'
+
+nounnon = nounnot
+
+termnot'' :: (Result -> Result) -> Result -> Result
+--termnot tmph vbph@(FDBR set) = intersect_fdbr'' vbph (nounnot $ tmph vbph)  --FDBR $ set `difference_fdbr` (tmph vbph), tmph vbph is always FDBR for FDBR input? seems so
+--termnot tmph vbph@(ComplementFDBR set) = intersect_fdbr'' (nounnot $ tmph vbph) vbph --nounnot $ union_fdbr'' (tmph vbph) (FDBR set)
+--NOTE: this is new and should definitely go in the paper (if it works!) -- "(not hall) discovered" maps to discovered - hall
+--"discovered not phobos" vs "discovered no moon", elaborate on differences (`phobos discovered no moon` is true while `phobos discovered not phobos` should be false...)
+termnot'' tmph vbph = intersect_result'' (nounnot'' $ tmph vbph) vbph --TODO: can this be defined in terms of nounnot?
+
+termnot' :: (TF Result -> TF Result) -> TF Result -> TF Result
+termnot' tmph vbph = liftA2 intersect_result'' (nounnot'' . tmph vbph) vbph
+
+termnot :: (TFMemo Result -> TFMemo Result) -> TFMemo Result -> TFMemo Result
+termnot tmph vbph = intersect_result (nounnot $ tmph vbph) vbph --TODO: is GI_NounAnd good enough here?  Should be GI_NounAndNot? is `(not hall) spins` the same as `a spinner (not (hall spins))`? I think so
+
+--TODO: FDBRs are sorted.  Use that to improve this.
+--TODO: verify sorted -- new representation?
+intersect_fdbr :: FDBR -> FDBR -> FDBR
+intersect_fdbr _ [] = []
+intersect_fdbr [] _ = []
+intersect_fdbr fdbr1@((e1, evs1):eei1) fdbr2@((e2, evs2):eei2)
+  = case compare e1 e2 of
+      LT -> intersect_fdbr eei1 fdbr2
+      EQ -> (e2, evs2):(intersect_fdbr eei1 eei2)
+      GT -> intersect_fdbr fdbr1 eei2
+
+--TODO: add grammar rules for termph AFTER prepositions
+
+--TODO: define difference, event preservation?
+--NOTE: requires FDBR be sorted...
+--NOTE: this is like `a - b`
+difference_fdbr :: FDBR -> FDBR -> FDBR
+difference_fdbr xs [] = xs
+difference_fdbr [] _ = []
+difference_fdbr fdbr1@((e1, evs1):eei1) fdbr2@((e2, evs2):eei2)
+    = case compare e1 e2 of
+      LT -> (e1, evs1):difference_fdbr eei1 fdbr2
+      EQ -> difference_fdbr eei1 fdbr2
+      GT -> difference_fdbr fdbr1 eei2
+
+--TODO: burden on caller to know that if cardinality of complement == 0 then False?  Or explicitly return FDBR []?
+
+intersect_result'' :: Result -> Result -> Result
+intersect_result'' (FDBR a) (FDBR b) = FDBR $ intersect_fdbr a b
+intersect_result'' (FDBR a) (ComplementFDBR b) = FDBR $ difference_fdbr a b
+intersect_result'' (ComplementFDBR a) (FDBR b) = FDBR $ difference_fdbr b a
+intersect_result'' (ComplementFDBR a) (ComplementFDBR b) = ComplementFDBR $ union_fdbr a b
+
+--TODO TRYING: explicit [] handling -- this makes functions like "which" easier, may also assist with "the least"?
+--should we always force 0 cardinality == FDBR []?
+--currently this function is used in "which"
+intersect_result''_ :: CardinalityFunction -> Result -> Result -> Result
+intersect_result''_ cardinality nph vbph = if cardinality res == 0 then FDBR [] else res
+    where
+        res = intersect_result'' nph vbph
+
+{-intersect_fdbr eei1 eei2
+  = [(subj2, evs2) | (subj1, evs1) <- eei1, (subj2, evs2) <- eei2, subj1 == subj2]-}
+
+intersect_result' :: SemFunc (TF Result -> TF Result -> TF Result)
+intersect_result' = liftA2 intersect_result'' >|< GettsIntersect GI_NounAnd
+
+intersect_result = wrapS2 intersect_result'
+
+union_fdbr :: FDBR -> FDBR -> FDBR
+union_fdbr fdbr1 fdbr2 = Map.toList $ Map.fromListWith (++) (fdbr1 ++ fdbr2)
+
+union_result'' :: Result -> Result -> Result
+union_result'' (FDBR a) (FDBR b) = FDBR $ union_fdbr a b
+union_result'' (FDBR a) (ComplementFDBR b) = ComplementFDBR $ b `difference_fdbr` a
+union_result'' (ComplementFDBR a) (FDBR b) = ComplementFDBR $ a `difference_fdbr` b
+union_result'' (ComplementFDBR a) (ComplementFDBR b) = ComplementFDBR $ a `intersect_fdbr` b
+
+--TRYING: explicit [] handling (needed? this isn't used right now)
+{-
+union_result''_ :: CardinalityFunction -> Result -> Result -> Result
+union_result''_ cardinality nph vbph = if cardinality res == 0 then FDBR [] else res
+    where
+        res = union_result'' nph vbph
+-}
+
+--TODO: REMEMBER liftA2 here instead if applyCard ''_ is causing issues
+union_result' :: SemFunc (TF Result -> TF Result -> TF Result)
+union_result' = liftA2 union_result'' >|< GettsUnion GU_NounOr
+
+union_result = wrapS2 union_result'
+
+nounand = intersect_result
+
+that = nounand
+
+--TODO: MERGE IMAGES PROPER (verify)
+
+nounor = union_result
+
+{-a' nph vbph =
+    length (intersect  nph vbph) /= 0-}
+a = intersect_result --WITH CAVEAT: a "non moon" "not spins" is FALSE if cardinality of complement == 0! this means FDBR [] and ComplementFDBR [...everything...] are treated the same
+any' = a
+the = a
+some = a
+an = a
+
+every''' :: FDBR -> FDBR -> FDBR
+every''' nph vbph | subset (map fst nph) (map fst vbph) = intersect_fdbr nph vbph
+                | otherwise = []
+
+cardinality' _ (FDBR nph) = List.length nph
+cardinality' (Just num_ents) (ComplementFDBR nph) = num_ents - List.length nph
+cardinality' Nothing _ = error "cardinality of complement requested, but it has not been retrived"
+
+--apply the cardinality of the entity set of the triplestore to the provided function
+--TODO: rename to applyCard2?
+applyCard :: (CardinalityFunction -> Result -> Result -> a) -> TF Result -> TF Result -> TF a
+applyCard f nph vbph rtriples = liftA2 (f $ cardinality' mCard) nph vbph rtriples
+    where
+        mCard = getCardinality rtriples
+
+applyCard1 :: (CardinalityFunction -> Result -> a) -> TF Result -> TF a
+applyCard1 f nph rtriples = liftA (f $ cardinality' mCard) nph rtriples
+    where
+        mCard = getCardinality rtriples
+
+
+every'' :: CardinalityFunction -> Result -> Result -> Result
+every'' cardinality nph vbph = if cardinality res == cardinality nph then res else FDBR []
+    where
+        res = intersect_result'' nph vbph
+
+--observation: if no negation appears in the query, then num_ents isn't needed.
+
+--TODO: store FDBR as a map instead of a list??
+
+--every moon spins = false, if there exists a moon entity that does not spin (moon - spins is not empty)
+--every moon (not spins) = false, if there exists a moon entity that spins (moon intersect spins is not empty)
+--every (not moon) spins = false, if there exists a non-moon entity that does not spin (counterexample fdbr?  need only one counterexample...)
+--true, otherwise
+--   if every (not moon) spins is false, then that means a (not moon) (not spins), that is comp(moon union spins) is not empty -- sufficient to test cardinality of moon union spins == #ents
+--every (not moon) (not spins) = false, if there exists a non-moon entity that spins (findable via spins - moon not empty)
+--true, otherwise
+
+every' :: SemFunc (TF Result -> TF Result -> TF Result)
+every' = applyCard every'' >|< GettsIntersect GI_Every
+
+every = wrapS2 every'
+
+most''' :: FDBR -> FDBR -> FDBR
+most''' nph vbph = if n_nph /= 0 && (n_nph_v / n_nph) > 0.5 then nph_v else []
+  where
+    nph_v = intersect_fdbr nph vbph
+    n_nph = fromIntegral $ length nph
+    n_nph_v = fromIntegral $ length nph_v
+
+--NOTE: cardinality seems to be really important...
+--NOTE: can we query it from the triplestore directly? e.g, query cardinality of sets, number of entities...
+--      seems to be important for handling of "the most" superlatives too
+
+--Encode cardinality of FDBR directly into it?
+
+most'' :: CardinalityFunction -> Result -> Result -> Result
+most'' cardinality nph vbph = if n_nph /= 0 && (n_nph_v / n_nph) > 0.5 then nph_v else FDBR []
+    where
+        nph_v = intersect_result'' nph vbph
+        n_nph = fromIntegral $ cardinality nph
+        n_nph_v = fromIntegral $ cardinality nph_v
+
+most' :: SemFunc (TF Result -> TF Result -> TF Result)
+most' = applyCard most'' >|< GettsIntersect GI_Most
+
+most = wrapS2 most'
+
+{- TODO:
+no' nph vbph =
+    length (intersect nph vbph) == 0
+no = liftM2 no'
+-}
+
+--TODO: move FDBR functions to XSaiga.FDBR
+--import XSaiga.FDBR as FDBR.
+--rename intersect,difference,union to match?
+--import XSaiga.Result too?
+--want to express that these are building blocks to work with
+
+--no moons spin: if true, then spin, if false, then []?
+--TODO: COMP set if false??? can't remember!
+    --specifically transitive verbs
+--alternatively: COMP not? i think this is right though
+no'' :: CardinalityFunction -> Result -> Result -> Result
+no'' cardinality nph (FDBR []) = ComplementFDBR [] --Special, to indicate truth?  SEE NOTES (TODO)
+no'' cardinality nph vbph = if cardinality res == 0 then vbph else FDBR []
+    where
+        res = intersect_result'' nph vbph
+
+no' = applyCard no'' >|< GettsIntersect GI_None
+
+no = wrapS2 no'
+
+none = no
+
+{- TODO:
+none' nph vbph =
+    no nph vbph
+none = liftM2 none'
+-}
+
+one''' :: FDBR -> FDBR -> FDBR
+one''' nph vbph   | length res == 1 = res
+                | otherwise = []
+    where
+      res = intersect_fdbr nph vbph
+
+one'' :: CardinalityFunction -> Result -> Result -> Result
+one'' cardinality nph vbph = let res = intersect_result'' nph vbph in if cardinality res == 1 then res else FDBR []
+
+one' :: SemFunc (TF Result -> TF Result -> TF Result)
+one' = applyCard one'' >|< GettsIntersect (GI_Number 1)
+
+one = wrapS2 one'
+
+two''' nph vbph   | length res == 2 = res --same thing here
+                | otherwise = []
+    where
+      res = intersect_fdbr nph vbph
+
+two'' :: CardinalityFunction -> Result -> Result -> Result
+two'' cardinality nph vbph = let res = intersect_result'' nph vbph in if cardinality res == 2 then res else FDBR []
+
+two' :: SemFunc (TF Result -> TF Result -> TF Result)
+two' = applyCard two'' >|< GettsIntersect (GI_Number 2)
+
+two = wrapS2 two'
+
+--which nph vbph = if result /= [] then result else "none."
+--  where result = unwords $ intersect nph vbph
+
+which''' :: FDBR -> FDBR -> T.Text
+which''' nph vbph = if not $ T.null result then result else "none."
+  where
+  result = T.intercalate ", " $ map fst $ intersect_fdbr nph vbph
+
+--the complement of the empty set denotes everything
+everything = ComplementFDBR []
+
+thing' :: SemFunc (TF Result)
+thing' = (const $ ComplementFDBR []) >|< (GettsComplement GettsNone)
+thing = wrapT0 thing' --Do not memoize "thing"
+
+--TODO: thing/exist should be defined in terms of ComplementFDBR [], not enumerated
+--OR if they are enumerated, they should be done so using the same 4 properties
+--used to determine the cardinality
+
+--3 cases
+--  1. result FDBR -> the usual
+--  2. a. result Comp, cardinality of complement == everything -> everything
+--  2. b. result Comp, otherwise -> everything except these:
+which'' :: CardinalityFunction -> Result -> Result -> T.Text
+{-
+which'' cardinality f1@(ComplementFDBR nph) f2@(ComplementFDBR vbph) = let r@(ComplementFDBR res) = intersect_result'' f1 f2 in
+    if cardinality r == cardinality everything then "none." --mention this in paper, qutie elegant!  could we do this directly in intersect_result?
+    else T.concat ["everything except these: ", (T.unwords $ map fst $ res)] --TODO: special case of card COMP ==0 and also commas!!!
+which'' cardinality nph vbph = let FDBR res = intersect_result'' nph vbph in if not $ List.null res then T.unwords $ map fst $ res else "none."
+-}
+
+which'' cardinality nph vbph =
+    case intersect_result''_ cardinality nph vbph of
+    FDBR res -> if not $ List.null res then T.intercalate ", " $ map fst $ res else "none."
+    ComplementFDBR res -> if not $ List.null res then T.concat["everything except: ", T.intercalate ", " $ map fst $ res] else "everything." --"all of them"?
+
+which' :: SemFunc (TF Result -> TF Result -> TF T.Text)
+which' = applyCard which'' >|< GettsIntersect (GI_Which)
+
+--which = liftS2 which'' (GettsIntersect (GI_Which))
+--T.Text is not memoized
+--need: unique name, but unmemoized result
+--like liftS, but SKIPS memoization
+which :: TFMemo Result -> TFMemo Result -> TFMemo T.Text
+which = wrapT2 which'
+--which (nph_tf, nph_g) (vbph_tf, vbph_g) = (f, g)
+--    where
+--        g = GettsIntersect (GI_Which) nph_g vbph_g
+--        f = liftA2 (liftM2 which'') nph_tf vbph_tf
+
+how_many''' nph vbph = tshow $ List.length (intersect_fdbr nph vbph)
+
+-- how many not moons not spin? need cardinality!
+--NOTE: major contribution of paper: encoding of cardinality of complement?  but how do we know when to request it?  can we make it optional?
+--major alleviation: using the triplestore itself to do what it's best at
+--major alleviation: using a map as the FDBR makes counting easier
+how_many'' cardinality nph vbph = let res = intersect_result'' nph vbph in tshow $ cardinality res
+
+how_many' = applyCard how_many'' >|< GettsIntersect (GI_HowMany)
+
+--NOTE MEMO: would REALLY like to say liftM2 here to skip memoization
+--but we can't because then it would not have a name and it would be top-level!
+--how_many = liftS2 how_many'' (GettsIntersect (GI_HowMany))
+how_many = wrapT2 how_many'
+{-how_many (nph, g1) (vbph, g2) = (f, g)
+    where
+        g = GettsIntersect (GI_HowMany) g1 g2
+        f = liftA2 (liftM2 how_many'') nph vbph-}
+
+--who' = which' <<*>> (nounor' <<*>> (get_members "person") <<*>> (get_members "science_team"))
+
+who = which ((get_members "person") `nounor` ((get_members "science_team")))
+
+what''' nph = if not $ T.null result then result else "nothing."
+    where result = T.intercalate ", " $ map fst nph --TODO: ADD COMMAS
+
+--TODO: should entities have to be declared? or can they be inferred via triples like subject, object, implement, location?
+--TODO: is a year an entity?  I think not, cite Kent, see MSc thesis for citation
+--TODO: can we get the cardinality of "every entity" via a special query to the triplestore?
+--would require upfront knowledge of what labels are entities to consider for counting purposes
+
+--YES: we can query cardinality on the server!
+
+{-
+    PREFIX : <http://solarman.richard.myweb.cs.uwindsor.ca#>
+
+    select (count(?ent) AS ?count) where {
+
+        ?ev ?prop ?ent .
+
+        FILTER (?prop IN ( :with_implement, :subject, :object ))
+
+    }
+
+-}
+
+what'' :: Result -> T.Text --as in "what discovered"?
+what'' (FDBR nph) = what''' nph
+what'' (ComplementFDBR []) = "everything."
+what'' (ComplementFDBR nph) = T.concat ["everything except: ", what''' nph]
+
+--NOTE: want to keep notion of "you don't pay for what you don't use"
+
+what' = fmap what'' >|< id
+
+--what (tf, tf_g) = (f, tf_g)
+--    where
+--        f = liftA (liftM what'') tf
+
+--is "id" correct here?
+what = wrapT1 what'
+
+--TODO: prepositions
+make_prep props tmph = (props, Nothing, tmph)
+
+make_prep_nph' props nph = (props, Nothing, intersect_result' <<*>> nph)
+
+make_prep_nph props nph = (props, Nothing, intersect_result nph)
+
+make_prep_superph props (ord, tmph) = (props, Just ord, tmph)
+
+--with :: (TF FDBR -> TF FDBR) -> ([T.Text], TF FDBR -> TF FDBR)
+with = make_prep ["with_implement"]
+
+by = make_prep ["subject"]
+
+at = make_prep ["location"]
+
+make_pnoun''' noun image = [(subj, evs) | (subj, evs) <- image, subj == noun]
+
+--this behaves like "intersect_result"
+make_pnoun'' :: T.Text -> Result -> Result
+make_pnoun'' noun (FDBR image) = FDBR $ make_pnoun''' noun image
+make_pnoun'' noun (ComplementFDBR image) = FDBR $ if make_pnoun''' noun image == [] then [(noun, [])] else [] --this is like "difference_fdbr"
+--TODO: hall (not spin) = [(hall,[])] -- note the empty list of events does not mean false in this context.  will this be a problem?
+
+make_pnoun' :: T.Text -> SemFunc (TF Result -> TF Result)
+make_pnoun' noun = (fmap $ make_pnoun'' noun) >|< GettsIntersect GI_NounAnd (GettsPNoun noun)
+
+make_pnoun noun = wrapS1 $ make_pnoun' noun
+
+--TODO: ugly hack to work around parser problem
+make_year' = make_pnoun' . tshow
+
+make_year = make_pnoun . tshow
+
+in_loc' = make_prep ["location"]
+in_year' = make_prep ["year"]
+
+--TODO: verify "subject" and identity here.  should not be introducing more info...
+--to = (\nph -> (["subject"], intersect_fdbr' nph)) >|< id
+to = make_prep_nph ["subject"]
+
+--New for new new semantics
+
+--Strategy: collect all events, get all triples of those evs with prop
+--use getts_fdbr_entevprop or similar to...
+
+{-make_prop_termphrase :: (TripleStore m) => m -> T.Text -> TF FDBR -> TF T.Text
+make_prop_termphrase ev_data prop nph = do
+  list <- nph
+  let evs = List.nub $ List.concatMap snd list
+  rtriples  <- getts_triples_entevprop ev_data [prop] evs
+  let finalList = T.unwords $ List.nub $ map (\(x,y,z) -> z) rtriples
+  return $ if not $ T.null finalList then finalList else "nothing."
+-}
+
+
+--"how did hall discover phobos"
+--"how was phobos discovered"
+--"how did (not (a person)) (not (discover a moon))"?  doesn't really make sense to ask.
+--TODO: return a result like "question doesn't make sense"?  or pull out implement from literally the whole complement??
+--NOTE: or perhaps "the answer excludes the following: " ... pull out property from complement
+make_prop_termphrase' :: T.Text -> TF Result -> TF T.Text
+make_prop_termphrase' prop nph triples = if not $ T.null finalList then T.concat [start, finalList] else emptycase
+  where
+    (nph_v, start, emptycase) = case nph triples of
+        FDBR fdbr -> (fdbr, "", "nothing.")
+        ComplementFDBR _ -> ([], "This list has no meaning: ", "I can't perform this query because I would need to enumerate the entire triplestore.")
+    evs = List.nub $ List.concatMap snd nph_v
+    rtriples = pure_getts_triples_entevprop triples [prop] evs
+    finalList = T.intercalate ", " $ List.nub $ map (\(x,y,z) -> z) rtriples
+
+--Now hold on: `how $ not discovered` refers to events other than discover events
+--`how $ a (not person) (not discover)`, not mutually exclusive
+--could have an implement not used in a discovery event that is also used in a discovery event
+--so the answer should not exclude these items...
+--need to enumerate the entire triplestore?
+
+--NOTE: thing == Comp [] or thing == get_members "thing"?
+--not thing == FDBR [], or not thing == COMP get_members "thing"?
+--we may want to force retrieval of all things if the word is used...
+--but we can define thing as a union of several properties: implement, location, subject, object
+--is a year a thing?  i didn't think so... do we distinguish entities from properties?
+--the working definition is that an entity is something that exists physically between some range of time
+--everything could mean Comp [], nothing could mean FDBR []
+
+--NOTE: 6 cases
+{-
+    FDBR containing every entity: everything
+    FDBR empty: nothing
+    FDBR has some stuff: these things
+    ComplementFDBR every entity: nothing
+    ComplementFDBR empty: everything
+    ComplementFDBR has some stuff: the answer excludes these things
+-}
+
+make_prop_termphrase_ :: T.Text -> SemFunc (TF Result -> TF T.Text)
+make_prop_termphrase_ prop = make_prop_termphrase' prop >|< (GettsPropTmph prop . GettsAttachP prop)
+
+--NOTE: text results are not memoized
+make_prop_termphrase :: T.Text -> TFMemo Result -> TFMemo T.Text
+--make_prop_termphrase prop (tf, g) = liftW (make_prop_termphrase'' prop) (GettsPropTmph prop . GettsAttachP prop)
+make_prop_termphrase prop = wrapT1 $ make_prop_termphrase_ prop
+
+--NOTE: we could simplify by taking in SemFunc things and lifting directly
+--would need to use const to facilitate the memoization
+--what is the cost?
+--we could bridge FDBR -> FDBR -> ... when possible and TF FDBR -> TF FDBR -> ... everywhere else
+--or even go one step further and require a TF FDBR interface
+
+where' = make_prop_termphrase "location"
+when' = make_prop_termphrase "year"
+how' = make_prop_termphrase "with_implement"
+
+findFirstObj (GettsIntersect _ _ y) = findFirstObj y
+findFirstObj (GettsUnion _ _ y) = findFirstObj y
+findFirstObj (GettsTP _ (_,_,object) _) = object
+
+--needs special handling due to semantics requiring info from getts
+whatobj' :: SemFunc (TF Result) -> SemFunc (TF T.Text)
+whatobj' (tf, getts) = make_prop_termphrase' prop tf >|< GettsPropTmph prop (GettsAttachP prop getts)
+  where
+    prop = findFirstObj getts
+
+--top level things should ALWAYS be named
+whatobj :: TFMemo Result -> TFMemo T.Text
+whatobj x = let g = getGetts x in make_prop_termphrase (findFirstObj g) x
+
+--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_trans_active "discover_ev"
+discovered = discover
+
+orbit = make_trans_active "orbit_ev"
+orbited = orbit-}
+
+--For prepositional phrases
+{-discover' = make_trans_active "discover_ev"
+discovered' = discover'
+
+orbit' = make_trans_active "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_inverted_relation :: (TripleStore m) => m -> String -> (IO [String] -> IO Bool) -> IO [String]
+make_inverted_relation ev_data rel tmph = do
+        images <- make_fdbr 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], TF FDBR -> TF FDBR)] -> [Event] -> IO Bool
+filter_ev _ [] _ = return True
+filter_ev ev_data ((names,pred):list) evs = do
+    relevant_list <- mapM (\name -> getts_fdbr_entevprop ev_data name evs) names
+    res <- pred $ return $ concat $ relevant_list
+    if res /= [] then filter_ev ev_data list evs else return False-}
+
+--TODO: three changes to transitive verbs
+-- 1. superlatives should be processed left to right, for consistency
+-- 2. extend transitive verb to handle complements (see notes)
+-- 3. modify grammar to allow termphrase to appear AFTER the list of prepositions in the input
+
+--new filter_ev: Handles prepositional phrases (IN TESTING)
+{-
+filter_ev' :: [([T.Text], Maybe Ordering, SemFunc (TF Result -> TF Result))] -> [Event] -> TF [Event]
+filter_ev' [] evs ev_data = evs
+filter_ev' ((names,_,pred):list) evs triples
+  = if not $ List.null res then filter_ev' list relevant_evs triples else []
+  where
+  relevant_triples = List.filter (\(x, _, _) -> x `elem` evs) triples -- only get triples with our events
+  relevant_list = concatMap (\name -> make_fdbr_with_prop relevant_triples name) names
+  res = (fst pred) (pure relevant_list) triples --TODO: prove correct (TODO USE getGetts AS WELL FOR MEMOIZATION!!!)
+  --NEW: Merge all events in predicate result for new query.  Result will be a subset of evs.
+  relevant_evs = List.nub $ concatMap snd res
+-}
+
+empty_result_fdbr = (TFMemoT (const $ return $ FDBR [], GettsNone)) --TODO: GettsNone?
+
+--NOTE MEMO: Don't bother memoizing the individual rows, just make sure memoized termphs are used and the actual transvb itself is memoized
+--It is incredibly unlikely the same list of evs will occur twice
+--Then again, I suppose these could be precomputed... can we do that without messing around here?
+--Is this a case for intersect_fdbr :: TFMemo a = ([Triple] -> State (Map.Map GettsTree a), Maybe GettsTree)?
+--What's a good name for GettsFilterEv?  How do we deal with the recursion?
+--Temporary workaround: don't bother memoizing the list of events
+
+--TODO: THIS IS ACTUALLY RIGHT TO LEFT ORDER with foldrM!! kuiper discovered one moon in 1948 actually works
+--      but kuiper discovered in 1948 one moon does not!
+--NOTE FIXED but do we actually want LTR????
+filter_ev :: [([T.Text], Maybe Ordering, (TFMemo Result -> TFMemo Result))] -> [Event] -> ReducedTriplestore -> State (Map.Map GettsTree Result) [Event]
+filter_ev list evs triples = foldlM filt evs list
+    where
+        filt [] _ = return []
+        filt evs (names, _, pred) = do
+            let pred_tf = getSem $ pred (make_pred_arg_memo evs names) --skips memoizing the result
+            --Memoization already happened in pred_tf thankfully
+            res <- pred_tf triples
+            let relevant_evs = case res of
+                    FDBR x -> List.nub $ concatMap snd x
+                    ComplementFDBR [] -> evs --in the case of "no", ComplementFDBR [] can be returned, so keep all original evs
+                    ComplementFDBR evs -> error "ComplementFDBR evs, should not happen!"
+            return relevant_evs
+
+{-
+Cases:
+    [] -> no args, no complement (False...)
+    (pred:preds) -> if pred [] && r preds then True else False...
+    problem: base case is True for just empty and False for recursive?
+    soln: detect in wrapper
+-}
+
+--check if ALL things are "no"
+filter_no :: [([T.Text], Maybe Ordering, (TFMemo Result -> TFMemo Result))] -> ReducedTriplestore -> State (Map.Map GettsTree Result) Bool
+filter_no [] triples = return False --"discovered" does not include complement
+filter_no list triples = foldlM filt True list
+    where
+        filt False _ = return False
+        filt next (names, _, pred) = do
+            let pred_tf = getSem $ pred empty_result_fdbr
+            --Memoization already happened in pred_tf thankfully
+            res <- pred_tf triples
+            case res of
+                FDBR _ -> return False
+                ComplementFDBR _ -> return (True && next)
+    --NEW: Merge all events in predicate result for new query.  Result will be a subset of evs.
+
+--check if the FIRST thing is a "no" -- using left to right
+first_no :: [([T.Text], Maybe Ordering, (TFMemo Result -> TFMemo Result))] -> ReducedTriplestore -> State (Map.Map GettsTree Result) Bool
+first_no [] triples = return False --"discovered" does not include complement
+first_no ((names, _, pred):_) triples = do
+            let pred_tf = getSem $ pred empty_result_fdbr
+            --Memoization already happened in pred_tf thankfully
+            res <- pred_tf triples
+            case res of
+                FDBR _ -> return False
+                ComplementFDBR _ -> return True
+
+make_pred_arg_pure :: [Event] -> [T.Text] -> TF Result
+make_pred_arg_pure evs names triples = let relevant_triples = List.filter (\(x, _, _) -> x `elem` evs) (getTriples triples) -- only get triples with our events
+                                        in FDBR $ concatMap (\name -> make_fdbr_with_prop relevant_triples name) names
+
+--Previously, we allowed things to not have names, and unnamed things inhibit memoization in expressions using them
+--this was used to kill memoization in prepositional phrases for the prop-FDBRs produced there as it was believed it would hurt performance
+--but this turned out not to be the case.
+--In that scheme, having a name and being memoized were separate things and 4 cases emerged: unnamed, unmemoized; named, unmemoized...; etc
+--it allowed fine grained control over memoization in transitive verbs, but also introduced increased complexity and the possibility of the top-level expression tree
+--being unnamed. that would have been a problem for doing the Getts* initial queries as that name is used to produce the flattened getts queries.
+--so, asserts were in the code to try to catch this.  as a side effect, it made TFMemo itself a monad transformer where using it would remove any name.
+--but that turned out to not be useful as generally you want names for things.
+--the new scheme is that everything is memoized, as empirically this was better, and everything is named.
+--make_pred_arg_unmemo evs names = wrapU0 (make_pred_arg_pure evs names)
+make_pred_arg_memo evs names = wrapS0 (make_pred_arg_pure evs names, GettsPropFDBR names evs)
+
+--TODO: can we memoize this?  could we perhaps have a GFDBR table?
+{-
+make_gfdbr' :: [T.Text] -> FDBR -> TF GFDBR
+make_gfdbr' props fdbr triples = gfdbr
+    where
+        --fdbr = fdbr_func triples
+        relevant_triples triples evs = List.filter (\(x, _, _) -> x `elem` evs) triples -- only get triples with our events TODO OPTIMIZE -- this is done TWICE! (this sure looks like filter_ev)
+        expand_evs triples evs = FDBR $ concatMap (\prop -> make_fdbr_with_prop (relevant_triples triples evs) prop) props
+        gfdbr = map (\(ent, evs) -> (ent, expand_evs triples evs)) fdbr
+-}
+
+--NOTE memo
+
+make_gfdbr :: [T.Text] -> FDBR -> ReducedTriplestore -> State (Map.Map GettsTree Result) GFDBR
+make_gfdbr props fdbr triples
+        = forM fdbr (\(ent, evs) -> do
+                    let prop_g = GettsPropFDBR props evs
+                    s <- get
+                    case Map.lookup prop_g s of
+                        Just (FDBR fdbr) -> return (ent, fdbr) --TODO FIXME
+                        Nothing -> do
+                            let relevant_triples = List.filter (\(x, _, _) -> x `elem` evs) (getTriples triples)
+                            let prop_fdbr = concatMap (\prop -> make_fdbr_with_prop relevant_triples prop) props
+                            let fixme = FDBR prop_fdbr
+                            modify (\s' -> Map.insert prop_g fixme s')  --TODO FIXME
+                            return (ent, prop_fdbr))
+
+
+make_partition :: Ordering -> GFDBR -> [GFDBR]
+make_partition ord gfdbr = map (map (\(_, ent, fdbr) -> (ent, fdbr))) $ groupBy equal $ sortBy (comparison ord) $ map (\(ent, fdbr) -> (length fdbr, ent, fdbr)) gfdbr
+    where
+        comparison EQ = error "EQ selected but has no associated meaning"
+        comparison LT = Ord.comparing (\(len, _, _) -> len)
+        comparison GT = flip (comparison LT)
+        equal (len1, _, _) (len2, _, _) = len1 == len2
+
+condense_gfdbr :: GFDBR -> FDBR
+condense_gfdbr = map (\(ent, fdbr) -> (ent, concatMap snd fdbr))
+
+{-
+filter_super' :: [([T.Text], Maybe Ordering, SemFunc (TF Result -> TF Result))] -> FDBR -> TF Result
+filter_super' preps fdbr_start rtriples = foldr filt fdbr_start preps
+    where
+        filt (_, Nothing, _) fdbr = fdbr --do nothing if no ordering is required (e.g, ``in 1877'')
+        filt (props, Just ord, _) fdbr = --here we do the actual ordering requirments for the superlative (termphrase is ignored because it has already been applied previously)
+            let gfdbr = make_gfdbr' props fdbr rtriples
+                sorted_parts = make_partition ord gfdbr
+                maybe_top_gfdbr = Maybe.listToMaybe sorted_parts in
+                    case maybe_top_gfdbr of
+                        Just top_gfdbr -> condense_gfdbr top_gfdbr
+                        Nothing -> []
+-}
+
+--TODO MEMO: can't memoize GFDBRs just yet or filter_super, but can memoize the rows
+--NOTE MEMO: May be able to memoize using fdbr_start?
+
+--NOTE: NOW LEFT TO RIGHT
+filter_super :: [([T.Text], Maybe Ordering, TFMemo Result -> TFMemo Result)] -> FDBR -> ReducedTriplestore -> State (Map.Map GettsTree Result) FDBR
+filter_super preps fdbr_start rtriples = foldlM filt fdbr_start preps
+    where
+        filt fdbr (_, Nothing, _) = return fdbr --do nothing if no ordering is required (e.g, ``in 1877'')
+        filt fdbr (props, Just ord, _) = --here we do the actual ordering requirments for the superlative (termphrase is ignored because it has already been applied previously)
+                do
+                    gfdbr <- make_gfdbr props fdbr rtriples
+                    let sorted_parts = make_partition ord gfdbr
+                    let maybe_top_gfdbr = Maybe.listToMaybe sorted_parts in
+                        case maybe_top_gfdbr of
+                            Just top_gfdbr -> return $ condense_gfdbr top_gfdbr
+                            Nothing -> return []
+
+
+{-make_trans_active' :: (TripleStore m) => m -> String -> (IO [String] -> IO Bool) -> [([String], IO [String] -> IO Bool)] -> IO [String]
+make_trans_active' ev_data rel tmph preps = do
+    images <- make_fdbr 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-}
+
+{-prepProps :: [([T.Text], a)] -> [T.Text]
+prepProps = nub . concatMap fst-}
+
+{-gatherPreps :: [([T.Text], SemFunc (TF FDBR -> TF FDBR))] -> SemFunc [([T.Text], TF FDBR -> TF FDBR)]
+gatherPreps preps = peelGetts preps >|< attachProps preps
+  where
+    peelGetts = map (\(propNames, sf) -> (propNames, getSem sf))
+    extractGetts = foldr iunion GettsNone . map (\(propNames, sf) -> getGetts sf)
+    attachProps preps = GettsPreps (nub $ concatMap fst preps) `iunion` (extractGetts preps) --Will contain AttachP info [propNames] and whatever else was in SemFunc(->)
+-}
+
+--Modified version of make_trans_active' to accomodate new filter_ev
+{-make_trans_active' :: (TripleStore m) => m -> T.Text -> [([T.Text], SemFunc (TF FDBR -> TF FDBR))] -> TF FDBR
+make_trans_active' ev_data rel preps = do
+  triples <- getts_triples_entevprop_type ev_data ("subject":(prepProps preps)) rel
+  let images = make_fdbr_with_prop triples "subject"
+  fdbrRelevantEvs <- mapM (\(subj, evs) -> filter_ev triples preps evs >>= (\x -> return (subj, x))) images
+  filterM (return . not . List.null . snd) fdbrRelevantEvs
+-}
+
+data Voice = ActiveVoice | PassiveVoice
+getVoiceProps ActiveVoice (_, prop1, prop2) = (prop1, prop2)
+getVoiceProps PassiveVoice (_, prop1, prop2) = (prop2, prop1)
+
+gettsTP :: Voice -> Relation -> [GettsTree] -> GettsTree
+gettsTP voice rel preps = GettsTP subject rel preps
+  where
+    (subject,_) = getVoiceProps voice rel
+
+relname (a, _, _) = a
+
+{-
+make_trans''' :: Voice -> Relation -> [([T.Text], Maybe Ordering, SemFunc (TF Result -> TF Result))] -> TF Result
+make_trans''' voice rel preps rtriples = ord_fdbr
+  where
+    (subjectProp,_) = getVoiceProps voice rel
+    filtRTriples = pure_getts_triples_entevprop_type rtriples (subjectProp:(nub $ concatMap (\(a,_,_) -> a) $ preps)) (relname rel)
+    images = make_fdbr_with_prop filtRTriples subjectProp
+    fdbrRelevantEvs = map (\(subj, evs) -> (subj, filter_ev' preps evs rtriples)) images
+    fdbr = filter (not . List.null . snd) fdbrRelevantEvs --TODO: this will make it so sets of events with a cardinality of 0 are not counted, leading to wrong "the least" behaviour
+    --Now for superlatives.  All termphrases are applied first, and ordering happens after.
+    ord_fdbr = filter_super' preps fdbr rtriples
+-}
+
+--TODO: filter_super: if only one partition (everyone ranks the same) then no winner, return []
+
+--TODO: need to modify this to actually use the ordering
+--NOTE: this is 2-phase: superlative phrases come second
+make_trans''2phase :: Voice -> Relation -> [([T.Text], Maybe Ordering, TFMemo Result -> TFMemo Result)] -> TFMemo Result
+make_trans''2phase voice rel preps = TFMemoT (f, g) --top level things ALWAYS have a name
+    where
+    g = gettsTP voice rel (gatherPreps preps)
+    f rtriples = do
+        s <- get
+        case Map.lookup g s of
+            Just res -> return res
+            Nothing -> do
+                let (subjectProp,_) = getVoiceProps voice rel
+                let filtRTriples = pure_getts_triples_entevprop_type rtriples (subjectProp:(nub $ concatMap (\(a,_,_) -> a) $ preps)) (relname rel)
+                let images = make_fdbr_with_prop filtRTriples subjectProp
+                fdbrRelevantEvs <- mapM (\(subj, evs) -> filter_ev preps evs rtriples >>= (\x -> return (subj, x))) images
+                let fdbr = filter (not . List.null . snd) fdbrRelevantEvs --TODO: this will make it so sets of events with a cardinality of 0 are not counted, partially leading to wrong "the least" behaviour (consider complement)
+                --Now for superlatives.  All termphrases are applied first, and ordering happens after.
+                do_complement <- first_no preps rtriples --Apply "no" complement based on first
+                filtered_super <- filter_super preps fdbr rtriples
+                let res = if do_complement then --this will be False if any superlative is present at the moment
+                        ComplementFDBR $ difference_fdbr images filtered_super --this will be difference_fdbr
+                    else
+                        FDBR filtered_super
+                modify (\s' -> Map.insert g res s')
+                return res
+
+filter_super2 :: ([T.Text], Maybe Ordering, TFMemo Result -> TFMemo Result) -> FDBR -> ReducedTriplestore -> State (Map.Map GettsTree Result) FDBR
+filter_super2 (_, Nothing, _) fdbr rtriples = return fdbr --No superlative, no problem
+filter_super2 (props, Just ord, _) fdbr rtriples = --here we do the actual ordering requirments for the superlative (termphrase already applied)
+                do
+                    gfdbr <- make_gfdbr props fdbr rtriples
+                    let sorted_parts = make_partition ord gfdbr
+                    let maybe_top_gfdbr = Maybe.listToMaybe sorted_parts in
+                        case maybe_top_gfdbr of
+                            Just top_gfdbr -> return $ condense_gfdbr top_gfdbr
+                            Nothing -> return []
+
+
+--TODO: this is copy-pasted practically from filter_evs... perhaps that should refer to this?
+filter_prep :: ([T.Text], Maybe Ordering, (TFMemo Result -> TFMemo Result)) -> [Event] -> ReducedTriplestore -> State (Map.Map GettsTree Result) [Event]
+filter_prep (names, _, pred) evs triples = do
+    let pred_tf = getSem $ pred (make_pred_arg_memo evs names) --skips memoizing the result
+    --Memoization already happened in pred_tf thankfully
+    res <- pred_tf triples
+    let relevant_evs = case res of
+            FDBR x -> List.nub $ concatMap snd x
+            ComplementFDBR [] -> evs --in the case of "no", ComplementFDBR [] can be returned, so keep all original evs
+            ComplementFDBR evs -> error "ComplementFDBR evs, should not happen!"
+    return relevant_evs
+
+--RTL order (preps flipped in make_trans)
+{-
+Do breadth-first evaluation of FDBR, with 2 cases:
+    * non-superlative phrase (including no, one, two..)
+    * superlative phrase ("the most")
+    * NOTE: how does "the least" fit in here?
+-}
+filter_ev2 :: [([T.Text], Maybe Ordering, (TFMemo Result -> TFMemo Result))] -> FDBR -> ReducedTriplestore -> State (Map.Map GettsTree Result) FDBR
+filter_ev2 list fdbr rtriples = foldlM filt fdbr list
+    where
+        filt [] _ = return []
+        filt fdbr p@(names, Nothing, pred) = apply_pred p fdbr
+        filt fdbr p = apply_pred p fdbr >>= (\res -> filter_super2 p res rtriples)
+        apply_pred p fdbr = do
+                new_fdbr <- mapM (\(subj, evs) -> filter_prep p evs rtriples >>= (\x -> return (subj, x))) fdbr
+                return $ filter (not . List.null . snd) new_fdbr --remove entities with empty events
+                 --TODO: this will make it so sets of events with a cardinality of 0 are not counted, partially leading to wrong "the least" behaviour (consider complement)
+
+--this seems to expect list is already flipped... maybe we ought not to do that?
+{-
+filter_ev2rtl :: [([T.Text], Maybe Ordering, (TFMemo Result -> TFMemo Result))] -> FDBR -> ReducedTriplestore -> State (Map.Map GettsTree Result) Result
+filter_ev2rtl [] fdbr rtriples = return $ FDBR fdbr
+filter_ev2rtl [last_prep] fdbr rtriples = do
+    do_complement <- first_no [last_prep] rtriples
+    new_fdbr <- filt fdbr last_prep
+    if do_complement then
+        ComplementFDBR $ fdbr `difference_fdbr` new_fdbr --this computes "not discover a ..."
+    else
+        FDBR $ new_fdbr
+filter_ev2rtl (prep:list) fdbr rtriples = filt prep (filter_ev2rtl list fdbr rtriples)
+    where
+        filt _ [] = return []
+        filt p@(names, Nothing, pred) fdbr = apply_pred p fdbr
+        filt p fdbr = apply_pred p fdbr >>= (\res -> filter_super2 p res rtriples)
+        apply_pred p fdbr = do
+                new_fdbr <- mapM (\(subj, evs) -> filter_prep p evs rtriples >>= (\x -> return (subj, x))) fdbr
+                return $ filter (not . List.null . snd) new_fdbr --remove entities with empty events
+                 --TODO: this will make it so sets of events with a cardinality of 0 are not counted, partially leading to wrong "the least" behaviour (consider complement)
+-}
+
+apply_pred p fdbr rtriples = do
+        new_fdbr <- mapM (\(subj, evs) -> filter_prep p evs rtriples >>= (\x -> return (subj, x))) fdbr
+        return $ filter (not . List.null . snd) new_fdbr --remove entities with empty events
+            --TODO: this will make it so sets of events with a cardinality of 0 are not counted, partially leading to wrong "the least" behaviour (consider complement)
+
+filt rtriples _ [] = return []
+filt rtriples p@(names, Nothing, pred) fdbr = apply_pred p fdbr rtriples
+filt rtriples p fdbr = apply_pred p fdbr rtriples >>= (\res -> filter_super2 p res rtriples)
+
+filter_ev2rtlattempt2 :: [([T.Text], Maybe Ordering, (TFMemo Result -> TFMemo Result))] -> FDBR -> ReducedTriplestore -> State (Map.Map GettsTree Result) Result
+filter_ev2rtlattempt2 [] fdbr rtriples = return $ FDBR $ fdbr
+filter_ev2rtlattempt2 [first_prep] fdbr rtriples =
+    do
+        do_complement <- first_no [first_prep] rtriples
+        new_fdbr <- filt rtriples first_prep fdbr
+        return $ if do_complement then
+            ComplementFDBR $ fdbr `difference_fdbr` new_fdbr --this computes "not discover a ..."
+        else
+            FDBR $ new_fdbr
+--first prep is treated differently: no complement is forced
+filter_ev2rtlattempt2 (first_prep:rest) fdbr rtriples = foldrM (filt rtriples) fdbr rest >>= \last_fdbr -> filter_ev2rtlattempt2 [first_prep] last_fdbr rtriples
+
+--TODO: mention unified approach in paper?
+
+is_no :: (TFMemo Result -> TFMemo Result) -> ReducedTriplestore -> State (Map.Map GettsTree Result) Bool
+is_no pred triples = do
+            let pred_tf = getSem $ pred empty_result_fdbr
+            --Memoization already happened in pred_tf thankfully
+            res <- pred_tf triples
+            case res of
+                FDBR _ -> return False
+                ComplementFDBR _ -> return True
+
+filt2 :: ReducedTriplestore -> FDBR -> ([T.Text], Maybe Ordering, TFMemo Result -> TFMemo Result) -> Result -> State (Map.Map GettsTree Result) Result
+--filt2 rtriples alltransvb _ (FDBR []) = return (FDBR []) --empty means stop processing (for now?)
+filt2 rtriples alltransvb p@(_, _, pred) (FDBR fdbr) = do
+            --the result of the previous thing is from something like "in 1877"
+    do_complement <- is_no pred rtriples
+    new_fdbr <- apply_pred p fdbr rtriples
+    if do_complement then
+        --the current result must be a subset of the FDBR down the chain
+        --this could happen in like "no moons in 1877"
+        --this will ensure "hall" is kept in "disovered no moons in 1877"
+        return $ ComplementFDBR $ fdbr `difference_fdbr` new_fdbr
+        --can ignore superlative entirely -- "pred" takes precedence
+    else
+        --do it normally
+        filter_super2 p new_fdbr rtriples >>= return . FDBR --result of superlative is always FDBR (for now)
+
+filt2 rtriples alltransvb p@(_, _, pred) (ComplementFDBR fdbr) = do
+            --the result of the previous thing is from something like "no"
+    do_complement <- is_no pred rtriples
+    let c_fdbr = alltransvb `difference_fdbr` fdbr
+    new_fdbr <- apply_pred p c_fdbr rtriples
+    if do_complement then
+
+        --current thing is like "no" and the previous thing is
+        --this could happen, for example, in the query "no moons in no places"
+        --the complement has the form ComplementFDBR [in a place]
+        --can extract FDBR as follows: transvb - complement (want this explicitly to handle the cas "COMP [a moon in a place]" which corresponds to "no moon in no place")
+        --the current result must be the entire termph set, not just the fdbr in there
+
+        --so c_fdbr corresponds to [a non-moon/nothing in a non-place/nowhere]
+
+        --new_fdbr corresponds to [at a non-blah/nowhere a non-moon/nothing in a non-place/nowhere] (no will ensure that)
+        --convert this back: now we have [at no place no moon in no place] (TODO: fixup example)
+        return $ ComplementFDBR $ alltransvb `difference_fdbr` new_fdbr
+    else
+        --current thing is like "in 1877", but what we have is a complement
+        --this could happen, for example, like "in 1877 at no place"
+        --result should be an FDBR representing "in 1877 at a non place" (including nowhere)
+        filter_super2 p new_fdbr rtriples >>= return . FDBR -- counts the most moons in non-places/nowhere
+
+filter_ev2rtlattempt3 :: [([T.Text], Maybe Ordering, (TFMemo Result -> TFMemo Result))] -> FDBR -> ReducedTriplestore -> State (Map.Map GettsTree Result) Result
+filter_ev2rtlattempt3 list alltransvb rtriples = foldrM (filt2 rtriples alltransvb) (FDBR alltransvb) list --lltransvb needs to be kept for all invocations of filt2
+
+--this is strictly right to left (?) no 2 phase
+make_trans''rtl :: Voice -> Relation -> [([T.Text], Maybe Ordering, TFMemo Result -> TFMemo Result)] -> TFMemo Result
+make_trans''rtl voice rel ltrPreps = TFMemoT (f, g) --top level things ALWAYS have a name
+    where
+    --preps = reverse ltrPreps --TODO NOTE: RTL ORDER (needs a different name because not $ a moon is not the same as discover no moon in terms of the FDBR returned
+    --preps = ltrPreps
+    --rtlPreps = reverse ltrPreps
+    g = gettsTP voice rel (gatherPreps ltrPreps) --for memoization purposes, use "discover no moon in 1877" even though evaluation order is rtl
+    f rtriples = do
+        s <- get
+        case Map.lookup g s of
+            Just res -> return res
+            Nothing -> do
+                let (subjectProp,_) = getVoiceProps voice rel
+                let filtRTriples = pure_getts_triples_entevprop_type rtriples (subjectProp:(nub $ concatMap (\(a,_,_) -> a) $ ltrPreps)) (relname rel)
+                let images = make_fdbr_with_prop filtRTriples subjectProp
+                --do_complement <- first_no ltrPreps rtriples --use ltrPreps because "no" complement inclusion depends solely on first "no" after the transvb
+                {-let adjusted_preps = reverse $ if do_complement then --reverse evaluation order here
+                        case ltrPreps of
+                            (x:xs) -> special x:xs
+                            [] -> error "attempting to 'no' when empty"
+                        else
+                            ltrPreps-}
+                --fdbr <- filter_ev2rtl ltrPreps images rtriples
+                {-let res = if do_complement then --this will be False if any superlative is present at the moment
+                        --ComplementFDBR $ difference_fdbr images fdbr --this will be difference_fdbr NOTE: needs adjustment for new scheme!
+                        ComplementFDBR $ fdbr
+                    else
+                        FDBR fdbr-}
+                res <- filter_ev2rtlattempt3 ltrPreps images rtriples
+                modify (\s' -> Map.insert g res s')
+                return res
+
+make_trans'' = make_trans''rtl
+
+--make_trans_active' "discover_ev" <<*>> (gatherPreps [at us_naval_observatory, in' 1877])
+--TODO: rtriples is used directly?? is this correct?
+--TODO: refactor to take into account active tmph
+--TODO: refactor both passive and active into same function (active version may involve more)
+
+--SCHEME
+--empty denotes tmph
+--' denotes preps
+--'' denotes tmph followed by preps
+
+{-
+make_trans_active'_ :: Relation -> [([T.Text], Maybe Ordering, SemFunc (TF Result -> TF Result))] -> SemFunc (TF Result)
+make_trans_active'_ rel preps =  make_trans''' ActiveVoice rel preps >|< gettsTP ActiveVoice rel (gatherPreps' preps)
+-}
+
+make_trans_active' rel preps = make_trans'' ActiveVoice rel preps
+
+--TODO: Bug in solarman3 semantics here with only "subject" in GettsTP
+--make_trans_active :: T.Text -> SemFunc ((TF FDBR -> TF FDBR)  -> TF FDBR)
+--make_trans_active ev_type = (\tmph_sem -> make_trans_active'' ev_type [(["object"], tmph_sem)]) >|< (\g -> GettsTP ["subject", "object"] ev_type [gettsApply g])
+
+--make_trans_active :: Relation -> SemFunc (TF FDBR -> TF FDBR) -> SemFunc (TF FDBR)
+make_trans_active rel tmph = make_trans_active' rel [([object], Nothing, tmph)]
+  where
+    (_, object) = getVoiceProps ActiveVoice rel
+
+--make_trans_active'' :: Relation -> SemFunc (TF FDBR -> TF FDBR) -> [([T.Text], Maybe Ordering, SemFunc (TF FDBR -> TF FDBR))] -> SemFunc (TF FDBR)
+make_trans_active'' rel tmph preps = make_trans_active' rel (([object], Nothing, tmph):preps)
+  where
+    (_, object) = getVoiceProps ActiveVoice rel
+
+{-make_trans_passive' :: (TripleStore m) => m -> String -> [([String], IO [String] -> IO Bool)] -> IO [String]
+make_trans_passive' ev_data rel preps = do
+    images <- make_fdbr 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_trans_passive' to accomodate new filter_ev
+{-make_trans_passive' :: (TripleStore m) => m -> T.Text -> [([T.Text], SemFunc (TF FDBR -> TF FDBR))] -> TF FDBR
+make_trans_passive' ev_data rel preps = do
+    triples <- getts_triples_entevprop_type ev_data ("object":(prepProps preps)) rel
+    let images = make_fdbr_with_prop triples "object"
+    fdbrRelevantEvs <- mapM (\(subj, evs) -> filter_ev triples preps evs >>= (\x -> return (subj, x))) images
+    filterM (return . not . List.null . snd) fdbrRelevantEvs-}
+
+{-
+make_trans_passive'_ :: Relation -> [([T.Text], Maybe Ordering, SemFunc (TF Result -> TF Result))] -> SemFunc (TF Result)
+make_trans_passive'_ rel preps = make_trans''' PassiveVoice rel preps >|< gettsTP PassiveVoice rel (gatherPreps' preps)
+-}
+
+make_trans_passive rel preps = make_trans'' PassiveVoice rel preps
+
+--Copied from old solarman:
+yesno''' x = if x /= [] then "yes." else "no"
+
+yesno'' :: CardinalityFunction -> Result -> T.Text
+yesno'' cardinality x = if cardinality x > 0 then "yes." else "no."
+
+yesno' :: SemFunc (TF Result -> TF T.Text)
+yesno' = applyCard1 yesno'' >|< GettsYesNo
+
+yesno :: TFMemo Result -> TFMemo T.Text
+yesno = wrapT1 yesno'
+
+_truefalse''' x = if x /= [] then "true." else "false."
+_truefalse'' cardinality x = if cardinality x > 0 then "true." else "false."
+
+_truefalse' = applyCard1 _truefalse'' >|< GettsYesNo
+
+_truefalse :: TFMemo Result -> TFMemo T.Text
+_truefalse = wrapT1 _truefalse'
+
+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 []-}
+
+--TODO: MERGE IMAGES PROPER (verify new impl)
+--TODO: This is basically termand
+--TODO: and/or in grammar should follow standard precedence -> ^ binds tighter than v, and also force left to right.
+sand''' [] _ = []
+sand''' _ [] = []
+sand''' fdbr1 fdbr2 = union_fdbr fdbr1 fdbr2
+
+sand'' = termand''
+
+--what about sentor?  it should work like termor.
+
+sand' = applyCard sand'' >|< GettsUnion GU_NounAnd
+
+sand = wrapS2 sand'
+
+--TODO: testing
+{-
+moon = get_members "moon"
+phobos = make_pnoun "phobos"
+hall = make_pnoun "hall"
+discover = make_trans_active "discover_ev"
+discover' = make_trans_active' "discover_ev"
+discover'' = make_trans_active'' "discover_ev"
+discover_ = make_trans_passive "discover_ev"
+telescope = get_members "telescope"
+person = get_members "person"
+planet = get_members "planet"
+discoverer = get_subjs_of_event_type "discover_ev"
+orbits = make_trans_active "orbit_ev"
+orbits' = make_trans_active' "orbit_ev"
+spins = get_members "spin"
+-}
+
+{-
+||-----------------------------------------------------------------------------
+||  BASIC INTERPRETERS
+||-----------------------------------------------------------------------------
+-}
+
+--cnoun = superterminal Cnoun (\x -> [NOUNCLA_VAL $ get_members x])
+
+--TODO: spellchecker?  if invalid word, refuse query
+--TODO: do we need a lexer to tag things as pnouns, cnouns, etc?
+--TODO: must be careful to not treat words like "who", "what", etc as pnouns!
+--pnoun = superterminal Pnoun (\x -> Just [TERMPH_VAL $ make_pnoun x])
+--TODO: this is a hack to exclude years and anything in the dictionary that is not a pnoun from being considered one
+--Need a more sophisticated approach
+pnoun           =  memoize_terminals_from_dictionary Pnoun
+{-pnoun = superterminal Pnoun $ \x -> case TR.decimal x of
+    Right (y, _) -> Nothing
+    Left _ -> if x `elem` excluded then Nothing else Just [TERMPH_VAL $ make_pnoun x]
+    where
+        excluded = map (\(x, _, _) -> x) $ filter (\(_,type',_) -> type' /= Pnoun) dictionary
+-}
+
+--TODO: must take into account plurals, like moon/s, person/persons/people, satellite/satellites/moons etc.  needs synonym mapper.
+cnoun           =  memoize_terminals_from_dictionary Cnoun
+{-
+cnoun = superterminal Cnoun $ \x -> case TR.decimal x of
+    Right (y, _) -> Nothing
+    Left _ -> if x `elem` excluded then Nothing else case Map.lookup x synonyms of
+        --Note: discoverer is treated differently as the members are generated from the transitive verb subject
+        --orbiter would be treated the same way
+        --in general, these are nounphrases formed from transverbphrases?
+        --an intransitive verb is similar (spinner, which comes from treating spin like a transvb)
+        --all transitive verbs can be made to be intransitive
+        --but not all intransitive verbs are transitive
+        --should come up with a generation scheme:
+        -- <verb>er/<verb>ers -- are intransitive
+        -- <verb>ed/<verb>s -- are transitive, subject to synonym mapping
+        -- <cnoun>/<couns>s -- are cnouns, subject to synonym mapping
+        -- <pnoun> -- is pnoun
+        -- exclude from the above "who/what/when/where/why/how" "a/one/two/..." "most/least" "in/at/by/using/with", "to", indefinite pronouns, "and/or/not", "does/did/do", "many"
+        -- those words form the "solid" syntax of the semantics
+        Nothing -> if x == "discoverer" || x == "discoverers" then Just $ [NOUNCLA_VAL $ get_subjs_of_event_type "discover_ev"] else Just $ [NOUNCLA_VAL $ get_members x]
+        Just syn -> Just $ [NOUNCLA_VAL $ get_members syn]
+    where
+        excluded = map (\(x, _, _) -> x) $ filter (\(_,type',_) -> type' /= Cnoun) dictionary
+        --TODO: make this smarter.  things that end with "s" tend to point to the original
+        synonyms = Map.fromList [
+            ("things", "thing"),
+            ("planets","planet"),
+            ("moons", "moon"),
+            ("satellite", "moon"),
+            ("satellites", "moon"),
+            ("human", "person"),
+            ("people", "person"),
+            ("persons", "person"),
+            ("team", "science_team"),
+            ("teams", "science_team"),
+            ("telescopes", "telescope"),
+            ("spacecrafts", "spacecraft"),
+            ("places", "place")]
+-}
+{-
+    from the dictionary:
+    ("thing",              Cnoun,     [NOUNCLA_VAL $ get_members "thing"]),
+    ("things",             Cnoun,     [NOUNCLA_VAL $ get_members "thing"]),
+    ("planets",            Cnoun,     [NOUNCLA_VAL $ get_members "planet"]),
+    ("planet",             Cnoun,     [NOUNCLA_VAL $ get_members "planet"]),
+    ("person",             Cnoun,     [NOUNCLA_VAL $ get_members "person"]),
+    ("sun",                Cnoun,     [NOUNCLA_VAL $ get_members "sun"]),
+    ("moon",               Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
+    ("moons",              Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
+    ("satellite",          Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
+    ("satellites",         Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
+    ("human",       Cnoun,    meaning_of nouncla "person" Nouncla),
+    ("discoverer",  Cnoun,            [NOUNCLA_VAL $ get_subjs_of_event_type "discover_ev"]),
+    ("discoverers", Cnoun,            [NOUNCLA_VAL $ get_subjs_of_event_type "discover_ev"]),
+    ("humans",      Cnoun,    meaning_of nouncla "person" Nouncla),
+    ("people",      Cnoun,    meaning_of nouncla "person" Nouncla),
+    ("team",                            Cnoun, [NOUNCLA_VAL $ get_members "science_team"]),
+    ("teams",                           Cnoun, [NOUNCLA_VAL $ get_members "science_team"]),
+    ("telescope",   Cnoun, [NOUNCLA_VAL $ get_members "telescope"]),
+    ("telescopes",  Cnoun, [NOUNCLA_VAL $ get_members "telescope"]),
+    ("spacecraft",  Cnoun, [NOUNCLA_VAL $ get_members "spacecraft"]),
+    ("spacecrafts", Cnoun, [NOUNCLA_VAL $ get_members "spacecraft"]),
+    ("place",   Cnoun, [NOUNCLA_VAL $ get_members "place"]),
+    ("places",  Cnoun, [NOUNCLA_VAL $ get_members "place"]),
+-}
+
+adj             =  memoize_terminals_from_dictionary Adj
+--OK -- so to get sensible parses we end up needing a dictionary anyway, for now
+--this seems to slow things down
+{-
+adj = superterminal Adj $ \x -> case TR.decimal x of
+    Right (y, _) -> Nothing
+    Left _ -> if x `elem` excluded then Nothing else Just [ADJ_VAL $ get_members x]
+    where
+        excluded = map (\(x, _, _) -> x) $ filter (\(_,type',_) -> type' /= Adj) dictionary
+-}
+det             =  memoize_terminals_from_dictionary Det
+intransvb       =  memoize_terminals_from_dictionary Intransvb
+transvb         =  memoize_terminals_from_dictionary Transvb
+linkingvb       =  memoize_terminals_from_dictionary Linkingvb
+relpron         =  memoize_terminals_from_dictionary Relpron
+termphjoin      =  memoize_terminals_from_dictionary Termphjoin
+verbphjoin      =  memoize_terminals_from_dictionary Verbphjoin
+nounjoin        =  memoize_terminals_from_dictionary Nounjoin
+indefpron       =  memoize_terminals_from_dictionary Indefpron
+{-
+terminator      =  uninterpreted (SPECIAL_SYMBOL_TERM ".")
+                   $orelse
+                   uninterpreted (SPECIAL_SYMBOL_TERM "?")
+                   $orelse
+                   uninterpreted (SPECIAL_SYMBOL_TERM "\n")
+-}
+sentjoin        =  memoize_terminals_from_dictionary Sentjoin
+quest1          =  memoize_terminals_from_dictionary Quest1
+quest2          =  memoize_terminals_from_dictionary Quest2
+quest3          =  memoize_terminals_from_dictionary Quest3
+quest4a         =  memoize_terminals_from_dictionary Quest4a
+quest4b         =  memoize_terminals_from_dictionary Quest4b
+quest5          =  memoize_terminals_from_dictionary Quest5
+quest6          =  memoize_terminals_from_dictionary Quest6
+
+--NEW FOR PREPOSITIONAL PHRASES
+prep            =  memoize_terminals_from_dictionary Prepn
+prepnph         =  memoize_terminals_from_dictionary Prepnph
+prepyear        =  memoize_terminals_from_dictionary Prepyear
+super           =  memoize_terminals_from_dictionary Super
+superph_start   =  memoize_terminals_from_dictionary SuperphStart
+--year            =  memoize_terminals_from_dictionary Year
+
+--NEW FOR NEGATION
+termphnot       =  memoize_terminals_from_dictionary Termphnot
+adverb          =  memoize_terminals_from_dictionary Adverb
+prefix          =  memoize_terminals_from_dictionary Prefix
+
+--years are treated like termphrases.  but should they be?
+--want to be able to ask "between 1877 and 1922"
+--discovered in 1877 or at an observatory
+--discovered by hall or kuiper
+--discovered in greenwich or padua
+--discovered at greenwich or padua
+--discovered in 1877 or padua?  doesn't make sense
+--discovered in 1877 at padua
+--discovered in 1877 or 1922
+--discovered between 1877 and 1922
+year = superterminal Year $ \t -> case TR.decimal t of
+    Right (y, _) -> Just [YEAR_VAL $ y]
+    Left _ -> Nothing
+
+--TODO: space leak here?  May be the foldr1, may be something else.  Stack needs 33KB.  Want to reduce it to 1KB
+{-memoize_terminals_from_dictionary key
+    = let key_words              = filter (\(_,type',_) -> type' == key) dictionary
+          list_of_terms          = map (\(a, _, z) -> terminal a z) key_words
+          altTerminals           = foldr1 (<|>) list_of_terms
+    in  memoize key altTerminals-}
+
+--Fixed space leak by just having it use a hashmap
+memoize_terminals_from_dictionary :: MemoL -> NTType AttValue
+memoize_terminals_from_dictionary key
+  = let altTerminals           = terminalSet key dictionary'''
+        --TODO: do we need to memoize this even?
+        --TODO: if we need to memoize it, we should roll it into a higher level of abstraction
+    in  memoize key altTerminals
+    --in altTerminals
+
+{-
+test p = runState (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]]
+  <|>
+  parser (nt prefix S4 *> nt snouncla S2)
+  [rule_s NOUNCLA_VAL OF LHS ISEQUALTO apply_prefix [synthesized PREFIX_VAL OF S4,
+                                                     synthesized NOUNCLA_VAL OF S2]]  --"non" applies closer than "that".  "non vacuumous moon" is also valid.  "non vacuumous moon that spins" will evaluate to "(non (vacuumous moon)) `that` spins"
+ )
+
+-------------------------------------------------------------------------------
+-- 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) --TODO: 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 preps S2 *> nt jointermph S3) --"discovered in... phobos (and blah and blah and blah)" --termph comes after preps
+    [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvbprep_tmph [synthesized VERB_VAL OF S1,
+                                                               synthesized PREP_VAL OF S2,
+                                                               synthesized TERMPH_VAL OF S3]]
+    <|>
+    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]]
+    <|> --NEW FOR SUPERLATIVES "discovered the most moons"
+    parser (nt transvb S1 *> nt superph S2)
+    [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvbsuper [synthesized VERB_VAL OF S1,
+                                                           synthesized SUPERPH_VAL OF S2]]
+    <|> --NEW FOR SUPERLATIVES "discovered the most moons in 1877 using the least telescopes..."
+    parser (nt transvb S1 *> nt superph S2 *> nt preps S3)
+    [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvbsuper [synthesized VERB_VAL OF S1,
+                                                           synthesized SUPERPH_VAL OF S2,
+                                                           synthesized PREP_VAL OF S3]]
+    <|>
+    parser (nt transvb S1 *> nt preps S2 *> nt superph S3) --NEW FOR NEGATION "discovered in 1877 the most moons" --termph comes after preps
+    [rule_s VERBPH_VAL OF LHS ISEQUALTO applytransvbprep_super [synthesized VERB_VAL OF S1,
+                                                                synthesized PREP_VAL OF S2,
+                                                                synthesized SUPERPH_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 adverb T1 *> nt transvb S2) --"was not discovered" (NEW)
+    [rule_s VERBPH_VAL  OF LHS ISEQUALTO apply_transvb_adverb [synthesized ADVERB_VAL  OF  T1,
+                                                               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 adverb T1 *>  nt transvb S2 *> nt preps S3) --"was not discovered by hall in..."
+    [rule_s VERBPH_VAL  OF LHS ISEQUALTO apply_transvb_adverb [synthesized ADVERB_VAL     OF  T1,
+                                                               synthesized VERB_VAL       OF  S2,
+                                                               synthesized PREP_VAL       OF  S3]]
+    <|>
+    parser (nt linkingvb S1  *>  nt jointermph S2 *> nt transvb S3) --"was phobos discovered"  --TODO: can't answer "how was phobos not discovered" at all yet
+    [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 SUPERLATIVE PHRASES
+-- public <superph> = the <super> <nouncla>
+superph
+ = memoize Superph
+  (parser (nt superph_start S1 *> nt super S2 *> nt nouncla S3)
+   [rule_s SUPERPH_VAL OF LHS ISEQUALTO applysuperph [synthesized SUPERPHSTART_VAL OF S1,
+                                                      synthesized SUPER_VAL OF S2,
+                                                      synthesized NOUNCLA_VAL OF S3]]
+  )
+
+----------------------------------------------------------------------------------
+--NEW FOR PREPOSITIONAL PHRASES
+
+-- public <preps> = <prepph> | <prepph> <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 <joinyear> = <year> | <joinyear> <termphjoin> <joinyear>
+joinyear = memoize Joinyear
+    (
+        parser (nt year S1) [rule_s TERMPH_VAL OF LHS ISEQUALTO applyyear [synthesized YEAR_VAL OF S1]]
+        <|>
+        parser (nt joinyear S1 *> nt termphjoin S2 *> nt joinyear S3)
+            [rule_s TERMPH_VAL  OF LHS ISEQUALTO appjoin1 [synthesized TERMPH_VAL     OF S1,
+                                                           synthesized TERMPHJOIN_VAL OF S2,
+                                                           synthesized TERMPH_VAL     OF S3]]
+    )
+
+-- 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]]
+     <|>
+     parser (nt prepnph S1 *> nt joinvbph S2) -- "to discover phobos"
+     [rule_s PREPPH_VAL OF LHS ISEQUALTO applyprepph_nph [synthesized PREPNPH_VAL OF S1,
+                                                         synthesized VERBPH_VAL OF S2]]
+     <|>
+     parser (nt prepyear S1 *> nt joinyear S2) -- "in 1877 or 1822 and 1923"
+     [rule_s PREPPH_VAL OF LHS ISEQUALTO applyprepph [synthesized PREPN_VAL OF S1,
+                                                      synthesized TERMPH_VAL  OF S2]]
+     <|>
+     parser (nt prep S1 *> nt superph S2)
+     [rule_s PREPPH_VAL OF LHS ISEQUALTO applyprepph_super [synthesized PREPN_VAL OF S1,
+                                                            synthesized SUPERPH_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]] -- "discovered ..." TODO: "was not discovered in 1877" "a moon (not discovered in 1877)" "a moon (not spins)"
+   <|>
+    parser (nt intransvb S5) -- "spins"
+    [rule_s VERBPH_VAL OF LHS ISEQUALTO copy [synthesized VERBPH_VAL OF S5]] -- "spins" TODO: convert intransvb to transvb??  intransvb is a transvb with no args
+   <|>
+    parser (nt linkingvb S1 *> nt det S2 *> nt nouncla S3)  -- "is a non vacuumous moon"
+    [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 termphnot S3 *> nt termph S4) --"not" binds closest to the termph, closer than "and" and "or"
+   [rule_s TERMPH_VAL OF LHS ISEQUALTO apply_termphnot [synthesized TERMPHNOT_VAL OF S3,
+                                                        synthesized TERMPH_VAL OF S4]]
+   )
+
+--TODO: space leak here?
+------------------------------------------------------------------------------------
+-- 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 quest1 T3 *> nt intransvb S5) --"did/does spin"
+    [rule_s VERBPH_VAL OF LHS ISEQUALTO copy [synthesized VERBPH_VAL OF S5]]
+   <|>
+    parser (nt quest1 T3 *> nt adverb T4 *> nt verbph S5) --"did/does not spin/discover" --TODO: hack, allows one to ask "what did not was not discovered..." obviously not the intended use
+    [rule_s VERBPH_VAL OF LHS ISEQUALTO apply_adverb [synthesized ADVERB_VAL OF T4,
+                                                      synthesized VERBPH_VAL OF S5]]
+   <|>
+    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]]
+    <|>
+      --(how|when|where|who) DID jointermph discover
+    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]]
+    <|> --whatobj case -- special because needs lookup in AST
+    parser (nt quest6 S1  *> nt quest1 S2  *>  nt sent S3 )
+    [rule_s QUEST_VAL  OF LHS ISEQUALTO ans6 [synthesized QUEST6_VAL  OF  S1,
+                                              synthesized QUEST1_VAL OF S2,
+                                              synthesized SENT_VAL    OF  S3]]
+    <|>
+    {-parser (nt quest7 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]]
+    <|>-}
+      --(whatsubj|who|how|when|where) [WAS] [tmph] discovered ...
+    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 quest7 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
+||-----------------------------------------------------------------------------
+-}
+
+intrsct1 [x, y] = NOUNCLA_VAL (intersect_result (getAtts getAVALS x) (getAtts getAVALS y))
+
+intrsct2 [x, y] = ADJ_VAL (intersect_result (getAtts getAVALS x) (getAtts getAVALS y))
+
+applydet [x, y] = TERMPH_VAL $ (getAtts getDVAL x) (getAtts getAVALS y)
+
+--make_trans_vb is very similar to make_trans_active.  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_trans_active 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] = VERBPH_VAL $ make_trans_active' reln ((make_prep [object] predicate) : preps)
+    where
+    reln = getAtts getBR x
+    predicate = getAtts getTVAL y
+    preps = getAtts getPREPVAL z
+    (_, object) = getVoiceProps ActiveVoice reln
+
+applytransvbprep [x,y] = VERBPH_VAL $ make_trans_active' reln [make_prep [object] predicate]
+    where
+    reln = getAtts getBR x
+    predicate = getAtts getTVAL y
+    (_, object) = getVoiceProps ActiveVoice reln
+
+applytransvbprep_tmph [x,y,z] = VERBPH_VAL $ make_trans_active' reln (preps ++ [(make_prep [object] predicate)])
+    where
+    reln = getAtts getBR x
+    preps = getAtts getPREPVAL y
+    predicate = getAtts getTVAL z
+    (_, object) = getVoiceProps ActiveVoice reln
+
+applytransvbsuper [x, y] = VERBPH_VAL $ make_trans_active' reln [make_prep_superph [object] superpred]
+    where
+    reln = getAtts getBR x
+    superpred = getAtts getSUPERPHVAL y
+    (_, object) = getVoiceProps ActiveVoice reln
+
+applytransvbsuper [x, y, z] = VERBPH_VAL $ make_trans_active' reln ((make_prep_superph [object] superpred) : preps)
+    where
+    reln = getAtts getBR x
+    superpred = getAtts getSUPERPHVAL y
+    preps = getAtts getPREPVAL z
+    (_, object) = getVoiceProps ActiveVoice reln
+
+applytransvbprep_super [x, y, z] = VERBPH_VAL $ make_trans_active' reln (preps ++ [make_prep_superph [object] superpred])
+    where
+    reln = getAtts getBR x
+    preps = getAtts getPREPVAL y
+    superpred = getAtts getSUPERPHVAL z
+    (_, object) = getVoiceProps ActiveVoice reln
+
+
+
+applytransvb_no_tmph [x,y] = VERBPH_VAL $ make_trans_active' reln preps
+    where
+    reln = getAtts getBR x
+    preps = getAtts getPREPVAL y
+
+applytransvb_no_tmph [x] = VERBPH_VAL $ make_trans_active' reln []
+    where
+    reln = getAtts getBR 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) = VERBPH_VAL $ termph (make_trans_passive reln preps)
+    where
+    linkingvb = getAtts getLINKVAL x2
+    termph = getAtts getTVAL x3
+    reln = getAtts getBR x4
+    preps = case xs of
+        [] -> []
+        (x5:_) -> getAtts getPREPVAL x5
+
+applyprepph [x, y] = PREPPH_VAL $
+        let prep_names = getAtts getPREPNVAL x
+            termph = getAtts getTVAL y in
+                make_prep prep_names termph
+
+applyprepph_nph [x, y] = PREPPH_VAL $
+        let prep_names = getAtts getPREPNPHVAL x
+            nph = getAtts getAVALS y in
+                make_prep_nph prep_names nph
+
+applyprepph_super [x, y] = PREPPH_VAL $
+        let prep_names = getAtts getPREPNVAL x
+            superph = getAtts getSUPERPHVAL y in
+                make_prep_superph prep_names superph
+
+applyprep [x] = PREP_VAL $ [getAtts getPREPPHVAL x]--[(["with_implement"], a telescope)]
+
+applypreps [x, y] = PREP_VAL $ getAtts getPREPPHVAL x : (getAtts getPREPVAL y)
+
+applysuperph [x, y, z] = SUPERPH_VAL $
+        let super_the = getAtts getSUPERPHSTARTVAL x
+            super_ordering = getAtts getSUPERVAL y
+            nph = getAtts getAVALS z
+            --inject :: Ordering -> SemFunc (TF FDBR -> TF FDBR) -> (Ordering, SemFunc (TF FDBR -> TF FDBR))
+            inject ord termph = (ord, termph)
+            in
+                inject super_ordering $ intersect_result nph
+
+
+applyyear [x] = TERMPH_VAL $ make_pnoun $ tshow $ getAtts getYEARVAL x
+
+--END PREPOSITIONAL PHRASES
+
+applyvbph [z] = VERBPH_VAL (getAtts getAVALS z)
+
+appjoin1 [x, y, z] = TERMPH_VAL $ (getAtts getTJVAL y) (getAtts getTVAL x) (getAtts getTVAL z)
+
+appjoin2 [x, y, z] = VERBPH_VAL ((getAtts getVJVAL y) (getAtts getAVALS x) (getAtts getAVALS z))
+
+apply_middle1 [x, y, z] = NOUNCLA_VAL ((getAtts getRELVAL y) (getAtts getAVALS x) (getAtts getAVALS z))
+
+apply_middle2 [x, y, z] = NOUNCLA_VAL ((getAtts getNJVAL y) (getAtts getAVALS x) (getAtts getAVALS z))
+
+apply_middle3 [x, y, z] =  NOUNCLA_VAL ((getAtts getRELVAL y) (getAtts getAVALS x) (getAtts getAVALS 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) = VERBPH_VAL $ make_trans_passive reln preps
+        where
+        reln = getAtts getBR x
+        preps = case xs of
+                  [] -> []
+                  (p:_) -> getAtts getPREPVAL p
+--END PREPOSITIONAL PHRASES
+
+--NEW FOR NEGATION
+apply_termphnot [x, y] = TERMPH_VAL $ (getAtts getTERMPHNOTVAL x) (getAtts getTVAL y)
+apply_prefix [x, y] = NOUNCLA_VAL $ (getAtts getPREFIXVAL x) (getAtts getAVALS y)
+apply_adverb [x, y] = VERBPH_VAL $ (getAtts getADVERBVAL x) (getAtts getAVALS y)
+
+apply_transvb_adverb (x:y:zs) = VERBPH_VAL $ (getAtts getADVERBVAL x) $ make_trans_passive reln preps
+    where
+    reln = getAtts getBR y
+    preps = case zs of
+                [] -> []
+                (p:_) -> getAtts getPREPVAL p
+--END NEGATION
+
+apply_termphrase [x, y] = SENT_VAL ((getAtts getTVAL x) (getAtts getAVALS y))
+
+sent_val_comp [s1, f, s2] = SENT_VAL ((getAtts getSJVAL f) (getAtts getSV s1) (getAtts getSV s2))
+
+ans1 [x, y] = QUEST_VAL ((getAtts getQU1VAL x) (getAtts getSV y) )
+
+ans2 [x, y] = QUEST_VAL ((getAtts getQU2VAL x) (getAtts getAVALS y))
+
+ans3 [x, y, z] = QUEST_VAL ((getAtts getQU3VAL x) (getAtts getAVALS y) (getAtts getAVALS z))
+
+ans5 [x, y, z] = QUEST_VAL ((getAtts getQU2VAL x) (getAtts getSV z))
+
+ans6 [x, y, z] = QUEST_VAL ((getAtts getQU6VAL x) (getAtts getSV z))
+
+truefalse [x] = QUEST_VAL $ _truefalse (getAtts getSV x) -- fmap (\fdbr -> if not (List.null fdbr) then "true." else "false.") `first` (getAtts getSV atts x)
+
+{-
+||-----------------------------------------------------------------------------
+|| 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_trans_active
+
+{- 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> = whatobj;
+
+<Intransvb> = exist | exists | spin | spins;
+
+-}
+
+discover_rel = ("discover_ev","subject","object")
+orbit_rel = ("orbit_ev", "subject", "object")
+use_rel = ("discover_ev", "subject", "with_implement")
+
+--TODO:
+{-
+Note the following case:
+    ("hall",               Pnoun,     [TERMPH_VAL $ make_pnoun "hall"]),
+    ("hall",               Pnoun,     [TERMPH_VAL $ make_pnoun "hall2"]),
+
+!!! Any refactorings need to preserve the semantics that both "hall"s are tried! !!!
+This is NOT the same as ("hall", Pnoun, [TERMPH_VAL $ make_pnoun "hall", TERMPH_VAL $ make_pnoun "hall2"]),
+which will (seemingly) use the first TERMPH_VAL and ignore the second completely.
+
+NOTE2: Map needs to be lazy in the values or else the parser will loop indefinitely with meaning_of: map from dict, evaluate meaning_of, which needs to use map from dict, which evaluates meaning of
+
+NOTE4: so fromListWith in HashMap is actually *NOT* strict in the values!  That means lazy evaluation is still happening!
+https://medium.com/@aleksandrasays/brief-normal-forms-explanation-with-haskell-cd5dfa94a157
+
+Use HashMap.Lazy to be safe.
+
+-}
+
+--Try to retain old semantics: collect AttValues of multiple definitions together and unpack them later
+--Use Lazy hashmap to ensure meaning_of still works!
+dictionary''' :: HashMap.HashMap (MemoL,T.Text) [[AttValue]]
+dictionary''' = HashMap.fromListWith (flip (++)) $ map (\(t,m,atts) -> ((m,t),[atts])) dictionary
+
+dictionary :: [(T.Text, MemoL, [AttValue])]
+dictionary = [
+    ("thing",              Cnoun,     [NOUNCLA_VAL $ thing]),
+    ("things",             Cnoun,     [NOUNCLA_VAL $ thing]),
+    ("planets",            Cnoun,     [NOUNCLA_VAL $ get_members "planet"]),
+    ("planet",             Cnoun,     [NOUNCLA_VAL $ get_members "planet"]),
+    ("person",             Cnoun,     [NOUNCLA_VAL $ get_members "person"]),
+    ("sun",                Cnoun,     [NOUNCLA_VAL $ get_members "sun"]),
+    ("moon",               Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
+    ("moons",              Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
+    ("satellite",          Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
+    ("satellites",         Cnoun,     [NOUNCLA_VAL $ get_members "moon"]),
+    ("atmospheric",        Adj,       [ADJ_VAL $ get_members "atmospheric"]),
+    ("blue",               Adj,       [ADJ_VAL $ get_members "blue"]),
+    ("solid",              Adj,       [ADJ_VAL $ get_members "solid"]),
+    ("brown",              Adj,       [ADJ_VAL $ get_members "brown"]),
+    ("gaseous",            Adj,       [ADJ_VAL $ get_members "gaseous"]),
+    ("green",              Adj,       [ADJ_VAL $ get_members "green"]),
+    ("red",                Adj,       [ADJ_VAL $ get_members "red"]),
+    ("ringed",             Adj,       [ADJ_VAL $ get_members "ringed"]),
+    ("vacuumous",          Adj,       [ADJ_VAL $ get_members "vacuumous"]),
+    ("exist",              Intransvb, [VERBPH_VAL $ thing]), --TODO: replace with COMP [], add "everything" == comp [] NOTE PAPER: can introduce a word like "actually exist" to force FDBR eval
+    ("exists",             Intransvb, [VERBPH_VAL $ thing]),
+    ("spin",               Intransvb, [VERBPH_VAL $ get_members "spin"]),
+    ("spins",              Intransvb, [VERBPH_VAL $ get_members "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]),
+    ("most",               Det,       [DET_VAL $ most]),
+    ("not",                Adverb,    [ADVERB_VAL $ nounnot]), --"a moon (not spins)
+    ("not",                Termphnot, [TERMPHNOT_VAL $ termnot]), --"(not hall) discovered"
+    ("non",                Prefix,    [PREFIX_VAL $ nounnon]), -- "a (non moon) spins"
+    ("the",                SuperphStart,       [SUPERPHSTART_VAL $ ()]),
+    ("most",               Super,     [SUPER_VAL $ GT]),
+    --("least",              Super,     [SUPER_VAL $ LT]), --TODO: problem with least is 0-cardinality and negation
+    ("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"]),
+    ("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_rel]),
+    ("discovers",          Transvb,   [VERB_VAL discover_rel]),
+    ("discovered",         Transvb,   [VERB_VAL discover_rel]),
+    ("orbit",              Transvb,   [VERB_VAL orbit_rel]),
+    ("orbited",            Transvb,   [VERB_VAL orbit_rel]),
+    ("orbits",             Transvb,   [VERB_VAL orbit_rel]),
+    ("use",                Transvb,   [VERB_VAL use_rel]),
+    ("used",               Transvb,   [VERB_VAL use_rel]),
+    ("uses",               Transvb,   [VERB_VAL use_rel]),
+    ("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]),
+    --AMBIGUOUS: how was phobos discovered ("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]),
+    ("what",               Quest6,    [QUEST6_VAL     $ whatobj]),
+    ("who",                Quest5,    [QUEST2_VAL     $ who]),
+    ("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 "discover_ev"]),
+    ("discoverers", Cnoun,            [NOUNCLA_VAL $ get_subjs_of_event_type "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 "orbit_ev"]),
+    --("orbits",      Intransvb,        [VERBPH_VAL $ get_subjs_of_event_type "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),
+    ("nothing",     Indefpron,meaning_of detph   "no thing" Detph),
+    --Begin prepositional stuff--
+    ("with",        Prepn, [PREPN_VAL ["with_implement"]]),
+    ("using",       Prepn, [PREPN_VAL ["with_implement"]]),
+    ("in",          Prepn, [PREPN_VAL ["location"]]),
+    ("at",          Prepn, [PREPN_VAL ["location"]]),
+    ("by",          Prepn, [PREPN_VAL ["subject"]]),
+    ("to",          Prepnph, [PREPNPH_VAL ["subject"]]),
+    ("in",          Prepyear, [PREPN_VAL ["year"]]),
+    --Begin telescope stuff--
+    ("telescope",   Cnoun, [NOUNCLA_VAL $ get_members "telescope"]),
+    ("telescopes",  Cnoun, [NOUNCLA_VAL $ get_members "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 "science_team"]),
+    ("teams",                           Cnoun, [NOUNCLA_VAL $ get_members "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 "spacecraft"]),
+    ("spacecrafts", Cnoun, [NOUNCLA_VAL $ get_members "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 "place"]),
+    ("places",  Cnoun, [NOUNCLA_VAL $ get_members "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"])
+
+    ]
+
+--todo, pull from dictionary, move to solarman
+isPrep "in" = True
+isPrep "at" = True
+isPrep "by" = True
+isPrep "using" = True
+isPrep "with" = True
+isPrep "to" = True
+isPrep _ = False
+
+--the rules:
+--brackets are collapsed
+--comma has a space after it
+--expressions are separated by spaces
+--if it is not punctuation, put a space after it unless a comma follows, in which case the space goes after the comma
+--"that" is written as "`that`"
+
+shouldSpace x y = isWord x && isWord y || isWord x && isOpeningBracket y || isClosingBracket x && isWord y || isClosingBracket x && isOpeningBracket y
+    where
+        isBracket x = elem x ["(", ")", "[", "]"]
+        isClosingBracket x = elem x [")", "]"]
+        isOpeningBracket x = elem x ["(", "["]
+        isWord "," = False
+        isWord x = not $ isBracket x
+
+intercalateBrackets [] = ""
+intercalateBrackets ("that":xs) = "`that` " `T.append` intercalateBrackets xs
+intercalateBrackets (x:",":xs) = x `T.append` ", " `T.append` intercalateBrackets xs
+intercalateBrackets (x:y:xs) | shouldSpace x y = x `T.append` " " `T.append` intercalateBrackets (y:xs)
+intercalateBrackets (x:xs) = x `T.append` intercalateBrackets xs
+
+--note: prepns are scoped as such: (a (b (c d)))
+--TODO: This code should be moved to SolarmanTriplestore as it is tied to the syntax of that grammar
+--Should keep a version in here which works as it did before
+flattenPreps :: SyntaxTree -> [SyntaxTree]
+flattenPreps qs@(SyntaxTreeNT ((SyntaxTreeT prep):_)) = [qs]
+flattenPreps (SyntaxTreeNT [x@(SyntaxTreeNT _), a]) = x:(flattenPreps a)
+
+syntaxTreeToLinearPreps :: SyntaxTree -> [T.Text]
+syntaxTreeToLinearPreps list = intercalate [","] $ map fmt $ flattenPreps list
+        where fmt (SyntaxTreeNT t) = concatMap syntaxTreeToLinear t
+
+syntaxTreeToLinear :: SyntaxTree -> [T.Text]
+syntaxTreeToLinear (SyntaxTreeT x) = [x]
+syntaxTreeToLinear (SyntaxTreeNT ts@((SyntaxTreeT prep):_)) | isPrep prep = ["["] ++ concatMap syntaxTreeToLinear ts ++ ["]"]
+syntaxTreeToLinear ts@(SyntaxTreeNT ((SyntaxTreeNT ((SyntaxTreeT prep):_)):_)) | isPrep prep = ["["] ++ syntaxTreeToLinearPreps ts ++ ["]"]
+syntaxTreeToLinear (SyntaxTreeNT ts) = ["("] ++ concatMap syntaxTreeToLinear ts ++ [")"]
+
+syntaxTreeToLinear' :: SyntaxTree -> T.Text
+syntaxTreeToLinear' (SyntaxTreeT x) = x
+syntaxTreeToLinear' (SyntaxTreeNT ts) = intercalateBrackets $ concatMap syntaxTreeToLinear ts
+
+parse i = formatAttsFinalAlt QUEST_VAL Question (Vector.length vWords + 1) $ snd $ test (question T0 empty_insattvals) (vWords)
+    where
+        vWords = Vector.fromList $ T.words i
+parseTree i = findAllParseTreesFormatted syntaxTreeToLinear' QUEST_VAL Question (Vector.length vWords + 1) $ snd $ test (question T0 empty_insattvals) (vWords)
+    where
+        vWords = Vector.fromList $ T.words i
+
+headParse = getQUVAL . head . parse
+
+input = Vector.fromList $ T.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
diff --git a/src/XSaiga/TypeAg2.hs b/src/XSaiga/TypeAg2.hs
new file mode 100644
--- /dev/null
+++ b/src/XSaiga/TypeAg2.hs
@@ -0,0 +1,675 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE FlexibleContexts #-}
+
+module XSaiga.TypeAg2 where
+
+import XSaiga.Getts
+import Data.Text as T hiding (map)
+import XSaiga.ShowText
+import Control.Arrow
+import Data.Bifunctor
+import Data.Biapplicative
+import Data.List (nub,union)
+import qualified Data.Map.Strict as Map
+import Control.Monad.State.Strict
+--import Control.Applicative
+import qualified Data.Data as Data
+
+import GHC.Generics
+import Data.Hashable
+import Debug.Trace
+import Generic.Data (gconIndex)
+
+data GettsIntersectType = GI_NounAnd | GI_Most | GI_Every | GI_Which | GI_HowMany | GI_None | GI_Number Int deriving (Eq, Ord)
+
+instance Show GettsIntersectType where
+    show GI_NounAnd = "intersect_fdbr"
+    show GI_Most = "most"
+    show GI_Every = "every"
+    show GI_Which = "which"
+    show GI_HowMany = "how many"
+    show (GI_Number 0) = "zero"
+    show (GI_Number 1) = "one"
+    show (GI_Number 2) = "two"
+    show (GI_Number 3) = "three"
+    show (GI_Number x) = show x
+
+data GettsUnionType = GU_NounOr | GU_NounAnd deriving (Eq, Ord)
+
+instance Show GettsUnionType where
+    show GU_NounOr = "nounor"
+    show GU_NounAnd = "nounand"
+
+--ReducedTriplestore represents the local triplestore that the semantics operate on
+--It is a pair of a list of triples with the cardinality of the set of entities within the triplestore.
+--The "maybe" part comes from the fact that the cardinality may not have been retrieved
+--Alternative representation: Map from events to (property,entity)?
+--Also, COULD store a special triple, like ("ev_triplestore", "cardinality", cardinality)
+--using pure* to access the cardinality?
+type ReducedTriplestore = ([Triple], Maybe Cardinality)
+getCardinality (_,x) = x
+getTriples (x, _) = x
+
+--idea: the tree should be fully applied whenever it is stored
+--If made fine grained enough, this may suffice for memoization
+type TF a = ReducedTriplestore -> a
+
+--newtype TFMemo a = TFMemo (TF (State (Map.Map GettsTree FDBR) a), Maybe GettsTree)
+
+--A SemFunc is really just a tuple of two functions
+type SemFunc a = (a, Treeify a)
+
+--convenience functions for TFMemo
+{-
+getGetts (TFMemo a) = snd a
+getSem (TFMemo a) = fst a
+
+instance Functor TFMemo where
+    fmap f m = TFMemo (\triples -> fmap f (getSem m triples), Nothing)
+
+instance Applicative TFMemo where
+    --(<*>) :: TFMemo (a -> b) -> TFMemo a -> TFMemo b
+    f <*> m = TFMemo (f', Nothing)
+        where
+            f' triples = (getSem f triples) <*> (getSem m triples)
+    --f <*> m = f >>= (\f' -> m >>= (\a -> return $ f' a))
+    pure a = TFMemo (const $ return a, Nothing)
+
+instance Monad TFMemo where
+    m >>= f = TFMemo (f', Nothing)
+        where
+            f' triples = getSem m triples >>= (\a -> getSem (f a) triples)
+    return = pure
+-}
+
+--OBSERVATIONS:
+{-
+ * we didn't even use liftM anywhere for TFMemoT
+ * we didn't use TFMemoT as a monad anywhere even
+ * we actually lost performance when not memoizing GettsPropFDBR (1.62 vs 1.22 observed on highly ambiguous query)
+ * we improved performance slightly using Strict map and Strict state
+ * we improved performance slightly by re-using the state between ambiguous parses
+ * so, do we need to overcomplicate with Nothing?  for now, lets not do this.
+ * liftS/T vs wrapS/V -- can we just get SemFunc to do our work for us?  as it turns out, yes, for no real additional cost
+   all memoized denotations are now in terms of the original SemFunc definitions using this
+
+ * significant slowdown in ambiguous queries from fact that SPARQL queries are not cached between parses
+   it may be ideal to collect ALL parses at once and then make a reduced triplestore from that
+   above IMPLEMENTED to GREAT effect!
+   and also fix our representation of how reduced triplestores are stored to alleviate the slowdown
+
+ * could we make an wrap style function that can handle N-arity?  probably needs TH
+
+ * TODO: pre-populate GettsMembers FDBRs, EntEvProp FDBRs, and optimize [Triple] for faster GettsPropFDBR queries
+ could we eliminate [Triple] altogether and do everything right from the FDBR cache?  probably not, but worth thinking about
+
+-}
+
+newtype TFMemoT t g m a = TFMemoT (t -> m a, g)
+getGetts (TFMemoT a) = snd a
+getSem (TFMemoT a) = fst a
+
+--this could be made into a monad if we use Maybe GettsTree... but it is not a useful one
+type TFMemo = TFMemoT ReducedTriplestore GettsTree (State (Map.Map GettsTree Result))
+
+--moon >>= (\moon_fdbr -> spins >>= (\spin_fdbr -> a'' moon_fdbr spins_fdbr))
+
+--the idea: bind erases the name but keeps the memoized computation
+--so liftM* works as expected
+--liftS* can be used to keep names for things
+--does this uphold the monad laws?
+
+data GettsTree =
+      GettsNone -- TODO MEMO: NOT to be used for memoization (replace with Maybe GettsTree in termphrases/superphrases?)
+    | GettsPNoun Text
+    | GettsMembers Text
+    | GettsTP Text Relation [GettsTree]
+    | GettsPrep [Text] (Maybe Ordering) GettsTree --TODO memoized superlatives
+    | GettsIntersect GettsIntersectType GettsTree GettsTree --representing result of intersect_fdbr (only evs from 2nd tree are kept)
+    | GettsUnion GettsUnionType GettsTree GettsTree --representing result of "union" of fdbrs.  Keeps everything.
+    | GettsYesNo GettsTree
+    | GettsPropTmph Text GettsTree
+    | GettsAttachP Text GettsTree
+    | GettsPropFDBR [Text] [Text] --props and events, used for memoizing filter_evs
+    | GettsComplement GettsTree
+    deriving (Eq, Show, Ord)
+
+showOrd Nothing = ""
+showOrd (Just x) = show x
+
+showList list = T.concat ["[", (T.intercalate "," list), "]"]
+
+treeToParsedSentence :: GettsTree -> Text
+treeToParsedSentence GettsNone = ""
+treeToParsedSentence (GettsPNoun t) = t
+treeToParsedSentence (GettsMembers t) = t
+treeToParsedSentence (GettsTP sub (rel, _, _) preps) = T.concat [rel, "_(", sub, ") ", XSaiga.TypeAg2.showList $ map treeToParsedSentence preps]
+treeToParsedSentence (GettsPrep props ord tree) = T.concat ["(", XSaiga.TypeAg2.showList props, ", ", pack $ showOrd ord, treeToParsedSentence tree , ")"]
+treeToParsedSentence (GettsIntersect t t1 t2) = T.concat $ ["(", (pack $ show t), " ", treeToParsedSentence t1] ++ (let x = treeToParsedSentence t2 in if T.null x then [] else [" ", x]) ++ [")"]
+treeToParsedSentence (GettsUnion t t1 t2) =  T.concat $ ["(", (pack $ show t), " ", treeToParsedSentence t1] ++ (let x = treeToParsedSentence t2 in if T.null x then [] else [" ", x]) ++ [")"]
+treeToParsedSentence (GettsYesNo t) = treeToParsedSentence t
+treeToParsedSentence (GettsPropTmph t tree) = T.concat [t, treeToParsedSentence tree]
+treeToParsedSentence (GettsAttachP t tree) = T.concat [t, treeToParsedSentence tree]
+treeToParsedSentence (GettsPropFDBR x y) = undefined
+
+
+data GettsFlatTypes =
+    FGettsMembers Text
+  | FGettsT [Text] Text
+  | FGettsCardinality [Text] --the list of properties that is used to count the total number of entities
+
+type FGettsMembers = Text
+type FGettsT = ([Text], Text)
+type FGettsCardinality = [Text] --Maybe?
+
+type GettsFlat = ([FGettsMembers], [FGettsT], FGettsCardinality)
+
+--Convert a function signature to a Getts style function
+--Keeps same kind, same arity
+type family Treeify x where
+  --Treeify ((TF a -> b) -> c) = Treeify (TF a -> b) -> Treeify c
+  --Treeify (TF a -> b) = GettsTree -> Treeify b
+  Treeify (TF a) = GettsTree
+  Treeify (a -> b) = Treeify a -> Treeify b
+  Treeify a = GettsTree
+  --Treeify _ = GettsTree<Paste>
+
+--TODO: Abstract tree into separate datastructure as Foldable and Traversable
+--It seems to me there are five layers:
+{-
+
+User layer: GettsT, GettsPrep, GettsAttachP ... these are like semantic "words"
+Unparsed Tree layer: GettsSubQuery, GettsList, GettsNode ... this is like the parse tree of those "words"
+Semantic (condensed) layer: Group SubQuery, List, Node, etc... into GettsTP, keeping tree
+Flattened layer: Only a list of GettsMembers and a list of GettsTP (flattened tree)
+Optimization layer: Knowledge to reduce queries (subsets, GettsTP of same type)
+
+Semantic tree layer
+Flattened layer
+
+-}
+
+--wrapS* memoizes SemFuncs
+--wrapT* does not (but still uses memoization in the arguments)
+--TODO: could TF/Memo Result be changed to TF/Memo c?
+wrapS0 :: SemFunc (TF Result) -> TFMemo Result
+wrapS0 (f,g) = TFMemoT (f', g)
+    where
+        f' triples = do
+            s <- get
+            case Map.lookup g s of
+                Just fdbr -> return fdbr
+                Nothing -> do
+                    let res = f triples
+                    modify (\s' -> Map.insert g res s')
+                    return res
+
+wrapS1 :: SemFunc (TF a -> TF Result) -> TFMemo a -> TFMemo Result
+wrapS1 (f,g) a = TFMemoT (f', g')
+                where
+                    g' = g (getGetts a)
+                    f' triples = do
+                            s <- get
+                            case Map.lookup g' s of
+                                Just fdbr -> return fdbr
+                                Nothing -> do
+                                    x <- getSem a triples
+                                    let res = f (const x) triples
+                                    modify (\s' -> Map.insert g' res s')
+                                    return res
+
+wrapS2 :: SemFunc (TF a -> TF b -> TF Result) -> TFMemo a -> TFMemo b -> TFMemo Result
+wrapS2 (f,g) a b = TFMemoT (f', g')
+                where
+                    g' = g (getGetts a) (getGetts b)
+                    f' triples = do
+                            s <- get
+                            case Map.lookup g' s of
+                                Just fdbr -> return fdbr
+                                Nothing -> do
+                                    x1 <- getSem a triples
+                                    x2 <- getSem b triples
+                                    let res = f (const x1) (const x2) triples
+                                    modify (\s' -> Map.insert g' res s')
+                                    return res
+
+wrapT0 :: (TF a, GettsTree) -> TFMemo a
+wrapT0 (f,g) = TFMemoT (f', g)
+                    where
+                        f' triples = return $ f triples
+
+wrapT1 :: (TF a -> TF b, GettsTree -> GettsTree) -> TFMemo a -> TFMemo b
+wrapT1 (f,g) a = TFMemoT (f', g')
+                    where
+                        g' = g (getGetts a)
+                        f' triples = (getSem a triples) >>= (\x -> return $ f (const x) triples)
+
+wrapT2 :: (TF a -> TF b -> TF c, GettsTree -> GettsTree -> GettsTree) -> TFMemo a -> TFMemo b -> TFMemo c
+wrapT2 (f,g) a b = TFMemoT (f', g')
+                    where
+                        g' = g (getGetts a) (getGetts b)
+                        f' triples = do
+                            x1 <- (getSem a triples)
+                            x2 <- (getSem b triples)
+                            return $ f (const x1) (const x2) triples
+
+--NEW: convert from biapplicative form to regular function application
+--this is a one way conversion, unless you have the property that the tuple elements are "invariant" with respect to each other
+
+--A type-level function to "tie" two functions together into a series of functions each taking a pair argument
+type family BiappFunc x y where
+    BiappFunc (a1 -> a2) (b1 -> b2) = (a1, b1) -> BiappFunc a2 b2
+    BiappFunc x y = (x, y)
+
+--Implementation of the "tie" function above
+class BiappFuncImpl x y where
+    tieFunc :: x -> y -> BiappFunc x y
+
+instance {-# OVERLAPPING #-} (BiappFuncImpl a2 b2) => BiappFuncImpl (a1 -> a2) (b1 -> b2) where
+    tieFunc f g = (\(a, b) -> tieFunc (f a) (g b))
+
+instance (BiappFunc a b ~ (a, b)) => BiappFuncImpl a b where
+    tieFunc a b = (a, b)
+
+--Implementation to convert `SemFunc a` to function application form
+fromBiapp (a, b) = tieFunc a b
+--toBiapp :: (a, b) -> (a2, b2) -> ... -> (a -> a2 -> ..., b -> b2 ->...)
+--TODO: make more general -- support generalized biapplicative?
+--fromBiapp :: Biapplicative p (a1 -> a2) (b1 -> b2) -> p a1 b1 -> p a2 b2
+--fromBiapp b x = (b <<*>> x) <<*> ...
+--TODO: support higher order functions as well using `extract` function
+
+--So, you get the original behaviour by doing convBiapp $ termor, convBiapp $ a, etc...
+--This allows biapplicative form to be used for easy extraction, and function application form for convenience
+--It would be nice to get rid of the overlapping instances though!
+
+--TODO: restrict arity of b (same kind as a)
+semFunc :: a -> Treeify a -> SemFunc a
+semFunc = bipure
+
+--Just for presentation purposes
+instance Show (TF FDBR) where
+  show x = "TF FDBR"
+
+instance (Show a) => Show (TF (State (Map.Map GettsTree FDBR) a)) where
+  show x = "TF State"
+
+instance Show (TF GFDBR) where
+  show x = "TF GFDBR"
+
+instance Show (TF Text) where
+  show x = "TF Text"
+
+
+
+--Unclean -- Foldable would help
+--TODO: filter duplicates
+--TODO: make [SemFunc a] not used with gatherPreps, apply directly to verb?
+--Would avoid GettsPreps situation
+
+--apply over the intersect_entevimages, remember evs of im2 are preserved and im1 are discarded
+gettsAttachP :: T.Text -> GettsTree -> GettsTree
+gettsAttachP prop (GettsIntersect t x y) = GettsIntersect t x (gettsAttachP prop y)
+gettsAttachP prop (GettsUnion t x y) = GettsUnion t x (gettsAttachP prop y)
+gettsAttachP prop (GettsTP p rel sub) = GettsTP p rel ((GettsPrep [prop] Nothing GettsNone):sub) --is this correct?  should i go back to the old way?  does cardinality have to match?
+--TODO MEMO -- altering tree may affect identity for memoization
+--IDEA!!  create a GettsAttachP node instead and only during flattening will it have any effect -- prevents altering trees
+
+--TODO: flattenGetts needs information about list of entity properties to count in the triplestore (to be used in a count query)
+flattenGetts'' :: [T.Text] -> GettsTree -> GettsFlat
+flattenGetts'' allEntProps tree = flattenGetts' tree
+    where
+    flattenGetts' :: GettsTree -> GettsFlat
+    flattenGetts' GettsNone = ([],[],[])
+    flattenGetts' (GettsPNoun _) = ([],[],[])
+    flattenGetts' (GettsMembers set) = ([set], [], [])
+    flattenGetts' (GettsYesNo fdbr) = flattenGetts' fdbr
+    flattenGetts' (GettsIntersect t i1 i2) = merge (flattenGetts' i1) (flattenGetts' i2)
+    flattenGetts' (GettsUnion t i1 i2) = merge (flattenGetts' i1) (flattenGetts' i2)
+    flattenGetts' (GettsPrep props _ sub) = error "Cannot flatten prep directly" --TODO
+    flattenGetts' (GettsPropTmph t sub) = flattenGetts' sub --TODO MEMO!
+    flattenGetts' (GettsAttachP prop sub) = flattenGetts' $ gettsAttachP prop sub
+    flattenGetts' (GettsTP prop (rel, _, _) preps) =
+        let props = nub $ prop:(Prelude.concatMap (\(GettsPrep p _ _) -> p) preps)
+            in Prelude.foldr merge ([],[(props, rel)],[]) $ map (\(GettsPrep _ _ sub) -> flattenGetts' sub) preps
+    flattenGetts' (GettsComplement tree) = merge ([],[],allEntProps) (flattenGetts' tree) --FIXME
+
+--TODO: refactor... expose to user somehow (triplestore retriever builder?)
+flattenGetts = flattenGetts'' ["subject","object","with_implement", "location"] --the Solarman props
+--TODO: denotation of "thing" or "entity" == above?
+
+merge :: GettsFlat -> GettsFlat -> GettsFlat
+merge (x1, y1, props1) (x2, y2, props2) = (x1 ++ x2, y1 ++ y2, union props1 props2)
+
+(>|<) :: a -> Treeify a -> SemFunc a
+f >|< g = bipure f g
+
+flatOptimize :: GettsFlat -> GettsFlat
+flatOptimize (members, gettsTPs, comp) = (nub members, dedupTP, nub comp)
+  where
+    dedupTP = Prelude.foldr (\(props, rel) -> \optlist -> if Prelude.any (\(_, r) -> r == rel) optlist
+                                                             then map (\(p, r) -> if r == rel then (nub $ props ++ p, rel) else (p, r)) optlist
+                                                             else (props,rel):optlist) [] gettsTPs
+
+--TODO: the triplestore itself, [Triple], should maybe be ([Triple], Maybe Int) for cardinality?
+--      this would at least make the #entities information available...
+--      but then, how do we specify which props to count?
+-- TODO: maybe good opportunity to specify comp properties here?
+getReducedTriplestore :: (TripleStore m) => m -> GettsFlat -> IO ReducedTriplestore
+getReducedTriplestore ev_data (sets, trans, compProps) = do
+  t1 <- mapM (\set -> getts_triples_members ev_data set) sets
+  t2 <- mapM (\(props, rel) -> getts_triples_entevprop_type ev_data props rel) trans
+  let triples = Prelude.concat $ t1 ++ t2
+  if Prelude.null compProps
+      then return $ (triples, Nothing)
+      else do t3 <- getts_cardinality_allents ev_data compProps
+              return $ (triples, Just t3)
+
+unionerr x y = error $ "attempt to union: " ++ show x ++ " with " ++ show y --TODO: debugging
+
+--TODO OLD
+{-gettsIdentity f GettsNone y = y
+gettsIdentity f x GettsNone = x
+gettsIdentity f x y = f x y
+
+gettsIntersect = gettsIdentity GettsIntersect
+
+--TODO: make this a proper union
+gettsUnion = gettsIdentity GettsUnion
+-}
+
+gettsApply g = g GettsNone
+
+--NOTE MEMO: only use gettsApply here for unique naming, not for memoizing individual semantic functions
+--NOTE MEMO: what do we do if we have unmemoized stuff?
+--NOTE MEMO: assume all top level things are named, because otherwise we can't query the database
+--cannot use sequenceA because it would look like
+--with (a (telescope (by (a (person))))) instead of (with ( a telescope )), (by (a person))
+--TODO: augment with superlative
+gatherPreps' :: [([T.Text], Maybe Ordering, SemFunc (TF a -> TF b))] -> [GettsTree]
+gatherPreps' = map (\(props, ord, g) -> GettsPrep props ord $ gettsApply $ snd g)
+
+gatherPreps :: [([T.Text], Maybe Ordering, TFMemo a -> TFMemo b)] -> [GettsTree]
+gatherPreps = map (\(props, ord, g) -> GettsPrep props ord $ applyGettsPrep g) --test with undefined to prove
+
+--used ONLY to get a unique identifier for prepositions
+applyGettsPrep :: (TFMemo a -> TFMemo b) -> GettsTree
+applyGettsPrep g = getGetts $ g $ TFMemoT (error "Should not eval!", GettsNone)
+
+--OBSERVATION: top level things need names for sure.  the only time we don't want to name things is sometimes inside other computations.
+--a top level expression without a name will cause the entire expression to not have a name
+--but that also means we can't retrieve anything from the triplestore because we will have Nothing to query it with
+--it would be nice to garrant that top level things will always have a name, and provide an escape hatch for those inside computations that don't contribute to the name of other things
+--in practice, it's only inside transitive verbs we need more control over this
+--in particular, the predicates in here need that control
+--if we pass Nothing in, we forbid them from memoizing
+--since they may appear at the top level, the same denotation must be used inside and outside
+--therefore, that denotation needs to account for this
+--if we make GettsIntersect have a Maybe GettsTree as the last argument, we can remove GettsNone
+--but this complicates liftS* a bit: (FDBR -> FDBR -> FDBR) -> (GettsTree -> Maybe GettsTree -> Maybe GettsTree) -> ...?
+
+--a <<*>> moon <<*>> spins...
+--PUBLIC INTERFACE (TODO)
+--TODO: make_fdbr_with_prop is DANGEROUS
+--Get members of named set
+--get_members :: (TripleStore m) => m -> Text -> IO FDBR
+--get_members = getts_members
+get_members' :: Text -> SemFunc (TF Result)
+get_members' set = (\r -> FDBR $ pure_getts_members r set) >|< GettsMembers set
+--NOTE: should we have get_not_members?  how do we get cardinalities?
+--Example: GettsComplement (GettsMembers "moon") -- this means the "not" should have something in it about the cardinality
+--like AttachCardinality?
+
+get_members = wrapS0 . get_members'
+
+--TODO: revise this for new transitive verb definition.  should not assume these fields in general.
+--NOTE: how do we handle "not" here?  need cardinality... how do we request it and fill it in here?
+get_subjs_of_event_type' :: Text -> SemFunc (TF Result)
+get_subjs_of_event_type' ev_type = (\r -> FDBR $ make_fdbr_with_prop (pure_getts_triples_entevprop_type r ["subject"] ev_type) "subject") >|< GettsTP "subject" (ev_type, "subject", "object") []
+
+get_subjs_of_event_type = wrapS0 . get_subjs_of_event_type'
+
+--constrName :: Data.Data a => a -> T.Text
+--constrName = T.pack . show . Data.toConstr
+
+--constrName = T.pack . gconName
+
+{-
+class Name a where
+  constrName :: a -> String
+instance {# OVERLAPPING #} Name a => Name (r -> a) where
+  constrName f = constrName (f undefined)
+instance (Data.Data a) => Name a where
+  constrName = show . toConstr
+-}
+
+--constrName :: Data.Data a => a -> Data.ConIndex
+--constrName = Data.constrIndex . Data.toConstr
+
+--instance (Generic a, Generic b) => Generic (a -> b) where
+
+--constrName :: (HasConstructor (Rep a), Generic a) => a -> Text
+--constrName = pack . genericConstrName . from
+
+{-class HasConstructor (f :: * -> *) where
+  genericConstrName :: f x -> String
+
+instance HasConstructor f => HasConstructor (D1 c f) where
+  genericConstrName (M1 x) = genericConstrName x
+
+instance (HasConstructor x, HasConstructor y) => HasConstructor (x :+: y) where
+  genericConstrName (L1 l) = genericConstrName l
+  genericConstrName (R1 r) = genericConstrName r
+
+instance Constructor c => HasConstructor (C1 c f) where
+  genericConstrName = conName
+-}
+
+constrName = gconIndex
+
+--Denotes either a set of examples or a set of exceptions
+--Inspired from Frost,Boulos (2004)
+data Result = FDBR FDBR | ComplementFDBR FDBR
+getFDBR (FDBR x) = x
+getFDBR (ComplementFDBR x) = x
+
+type CardinalityFunction = Result -> Cardinality
+
+data AttValue = VAL             {getAVAL    ::   Int}
+              | MaxVal          {getAVAL    ::   Int}
+              | RepVal          {getAVAL    ::   Int}
+              | Res             {getRVAL    ::   DisplayTree}
+              | B_OP            {getB_OP    ::   (Int -> Int -> Int)}
+              | U_OP            {getU_OP    ::   (Int -> Int)}
+              | SENT_VAL        {getSV      ::   TFMemo Result }
+              | NOUNCLA_VAL     {getAVALS   ::   TFMemo Result }
+              | VERBPH_VAL      {getAVALS   ::   TFMemo Result }
+              | ADJ_VAL         {getAVALS   ::   TFMemo Result } --TODO: treat adjective like termph whose argument is a moon?
+              | TERMPH_VAL      {getTVAL    ::   TFMemo Result -> TFMemo Result}
+              | DET_VAL         {getDVAL    ::   TFMemo Result -> TFMemo Result -> TFMemo Result}
+              | VERB_VAL        {getBR      ::   Relation } --stores relation, "subject" and "object". TODO: need to expand on later for "used"
+          | RELPRON_VAL     {getRELVAL  ::   TFMemo Result -> TFMemo Result -> TFMemo Result}
+          | NOUNJOIN_VAL    {getNJVAL   ::   TFMemo Result -> TFMemo Result -> TFMemo Result}
+          | VBPHJOIN_VAL    {getVJVAL   ::   TFMemo Result -> TFMemo Result -> TFMemo Result}
+          | TERMPHJOIN_VAL  {getTJVAL   ::   (TFMemo Result -> TFMemo Result) -> (TFMemo Result -> TFMemo Result) -> TFMemo Result -> TFMemo Result }
+          | SUPERPHSTART_VAL  {getSUPERPHSTARTVAL :: ()}
+          | SUPER_VAL       {getSUPERVAL ::  Ordering}
+          | SUPERPH_VAL     {getSUPERPHVAL :: (Ordering, TFMemo Result -> TFMemo Result)}
+          | PREP_VAL       {getPREPVAL ::   [([Text], Maybe Ordering, TFMemo Result -> TFMemo Result)]} -- used in "hall discovered phobos with a telescope" as "with".
+          | PREPN_VAL       {getPREPNVAL :: [Text]} --used for mapping between prepositions and their corresponding identifiers in the database.  I.e., "in" -> ["location", "year"]
+          | PREPNPH_VAL     {getPREPNPHVAL :: [Text]}
+          | PREPPH_VAL      {getPREPPHVAL :: ([Text], Maybe Ordering, TFMemo Result -> TFMemo Result)}
+          | TERMPHNOT_VAL   {getTERMPHNOTVAL :: (TFMemo Result -> TFMemo Result) -> (TFMemo Result -> TFMemo Result)}  --"not" (as in not-hall)
+          | PREFIX_VAL      {getPREFIXVAL :: TFMemo Result -> TFMemo Result} -- "non-" (as in "non moon")
+          | ADVERB_VAL      {getADVERBVAL :: TFMemo Result -> TFMemo Result} -- "not" (as in "not spins")
+          | LINKINGVB_VAL   {getLINKVAL ::   TFMemo Result -> TFMemo Result}
+          | SENTJOIN_VAL    {getSJVAL   ::   TFMemo Result -> TFMemo Result -> TFMemo Result}
+          | DOT_VAL         {getDOTVAL  ::   TFMemo Text}
+          | QM_VAL          {getQMVAL   ::   TFMemo Text}
+          | QUEST_VAL       {getQUVAL   ::   TFMemo Text}
+          | QUEST1_VAL      {getQU1VAL  ::   TFMemo Result -> TFMemo Text}
+          | QUEST2_VAL      {getQU2VAL  ::   TFMemo Result -> TFMemo Text}
+          | QUEST6_VAL      {getQU6VAL  ::   TFMemo Result -> TFMemo Text}
+          | QUEST3_VAL      {getQU3VAL  ::   TFMemo Result -> TFMemo Result -> TFMemo Text}
+          | YEAR_VAL        {getYEARVAL ::   Int}
+          deriving(Generic)
+
+--            | RESULT [sys_message]
+--Also called a "NodeName"
+--TODO: Split ALeaf out from here, and make this an enum!  ALeaf is used for terminals
+data MemoL    = Start | Tree | Num | Emp | ALeaf !Text | Expr | Op  | ET
+              | Pnoun|Cnoun|Adj|Det|Intransvb|Transvb|Linkingvb|Relpron|Termphjoin|Verbphjoin|Nounjoin|Preps|Prepph|Super|Superph|SuperphStart|Prepn|Prepnph|Prepyear|Joinyear|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|Adverb|Prefix|Termphnot
+                deriving (Eq,Ord,Show,Generic)
+
+instance Hashable MemoL
+
+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,Generic)
+                -- basic IDs for identifying each NT
+
+instance Hashable Id
+
+{-
+
+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         =  Text
+--type Bin_Rel        =  [(Entity,Entity)] -- [(Int, Int)]
+--type Relation     = (ES -> Bool) -> FDBR
+type Relation = (Text, Text, Text)
+
+data DisplayTree = B [DisplayTree]
+                 | N Int
+                   deriving (Show, Eq, Data.Data)
+
+--instance Show AttValue where
+--    show x = "AttValue"
+
+instance Show AttValue where
+    show (VAL  j)     = "VAL "    ++ show j
+    show (MaxVal j)   = "MaxVal " ++ show j
+    --show (SubVal j)   = "SubVal " ++ show j
+    show (RepVal j)   = "RepVal " ++ show j
+    show (Res j)      = "Tree: "  ++ show j
+    show (B_OP j)     = "B_OP"
+    show (U_OP j)     = "U_OP"
+    show _            = "AttValue"
+    {-show (SENT_VAL j) = show j
+    show (ErrorVal j) =  j
+    show (NOUNCLA_VAL j) = "NOUNCLA_VAL " ++ unwords $ map fst j
+    show (VERBPH_VAL j)  = "VERBPH_VAL " ++ unwords $ map fst j
+    show (ADJ_VAL    j)  = "ADJ_VLA " ++ unwords $ map fst j
+    show (TERMPH_VAL j)  = "TERMPH_VAL "
+    show (DET_VAL j)     = "DET_VAL "
+    show (VERB_VAL j)    =  "VERB_VAL " ++ j
+    show (RELPRON_VAL j)  = "RELPRON_VAL "
+    show (NOUNJOIN_VAL j)  = "NOUNJOIN_VAL "
+    show (VBPHJOIN_VAL j)  = "VBPHJOIN_VAL "
+    show (TERMPHJOIN_VAL j)  = "TERMPHJOIN_VAL "
+    show (PREP_VAL j)  = "PREP_VAL "
+    show (LINKINGVB_VAL j)  = "LINKINGVB_VAL "
+    show (SENTJOIN_VAL j)  = "SENTJOIN_VAL "
+    show (DOT_VAL j) = j
+    show (QM_VAL j) = j
+    show (QUEST_VAL j) = j
+    show (QUEST1_VAL j)  = "QUEST1_VAL"
+    show (QUEST2_VAL j)  = "QUEST2_VAL"
+    show (QUEST3_VAL j)  = "SENTJOIN_VAL"-}
+
+--TODO: find a better way to do this
+--NOTE: this is only here because of the expression problem in Haskell
+--Ideally, you do this with the EqC typeclass and then it gets handled properly in AGParser2
+--Instead, we define equality as equality up to the constructor used to generate the AttValue
+{-instance Eq AttValue where
+    (VAL  _)           ==  (VAL  _)     = True
+    (MaxVal _)         ==  (MaxVal _)   = True
+    (RepVal _)         ==  (RepVal _)   = True
+    (Res _)            ==  (Res _)      = True
+    (B_OP _)           ==  (B_OP _)     = True
+    (U_OP _)           ==  (U_OP _)     = True
+    (SENT_VAL _)       ==  (SENT_VAL _) = True
+    (NOUNCLA_VAL _)    ==  (NOUNCLA_VAL _) = True
+    (VERBPH_VAL _)     ==  (VERBPH_VAL _) = True
+    (ADJ_VAL _)        ==  (ADJ_VAL _) = True
+    (TERMPH_VAL _)     ==  (TERMPH_VAL _) = True
+    (DET_VAL _)        ==  (DET_VAL _) = True
+    (VERB_VAL _)       ==  (VERB_VAL _) = True
+    (RELPRON_VAL _)    ==  (RELPRON_VAL _) = True
+    (NOUNJOIN_VAL _)   ==  (NOUNJOIN_VAL _) = True
+    (VBPHJOIN_VAL _)   ==  (VBPHJOIN_VAL _) = True
+    (TERMPHJOIN_VAL _) ==  (TERMPHJOIN_VAL _) = True
+    (LINKINGVB_VAL _)  ==  (LINKINGVB_VAL _) = True
+    (SENTJOIN_VAL _)   ==  (SENTJOIN_VAL _) = True
+    (DOT_VAL _)        ==  (DOT_VAL _) = True
+    (QM_VAL _)         ==  (QM_VAL _) = True
+    (QUEST_VAL _)      ==  (QUEST_VAL _) = True
+    (QUEST1_VAL _)     ==  (QUEST1_VAL _) = True
+    (QUEST2_VAL _)     ==  (QUEST2_VAL _) = True
+    (QUEST3_VAL _)     ==  (QUEST3_VAL _) = True
+    (QUEST6_VAL _)     ==  (QUEST6_VAL _) = True
+    (PREP_VAL _)      ==  (PREP_VAL _) = True
+    (PREPN_VAL _)     ==  (PREPN_VAL _) = True
+    (PREPNPH_VAL _)   ==  (PREPNPH_VAL _) = True
+    (PREPPH_VAL _)    ==  (PREPPH_VAL _) = True
+    (YEAR_VAL _)      ==  (YEAR_VAL _) = True
+    (SUPERPHSTART_VAL _) ==  (SUPERPHSTART_VAL _) = True
+    (SUPER_VAL _)     ==  (SUPER_VAL _) = True
+    (SUPERPH_VAL _)   ==  (SUPERPH_VAL _) = True
+    _                  ==  _              = False
+-}
+
+--------- *********************** --------------
+-- needs to be simplified --
+--This seems to be used in the "left hand side" "right hand side" code... interpret arg1 as LHS and arg2 as RHS
+--if attempting to assign arg2 to arg1, only do it if the rules match
+
+{-
+setAtt (MaxVal _)   (MaxVal s)       = [MaxVal s]
+setAtt (RepVal _)   (RepVal s)       = [RepVal s]
+setAtt (VAL _)      (VAL s)          = [VAL s]
+setAtt (Res _)      (Res s)          = [Res s]
+
+setAtt (NOUNCLA_VAL _)  (NOUNCLA_VAL s)    = [NOUNCLA_VAL s]
+setAtt (ADJ_VAL _)      (ADJ_VAL s)        = [ADJ_VAL s]
+setAtt (TERMPH_VAL _)   (TERMPH_VAL s)     = [TERMPH_VAL s]
+setAtt (VERBPH_VAL _)   (VERBPH_VAL s)     = [VERBPH_VAL s]
+setAtt (SENT_VAL   _)   (SENT_VAL   s)     = [SENT_VAL s]
+setAtt (QUEST_VAL  _)   (QUEST_VAL  s)     = [QUEST_VAL s]
+setAtt (QUEST1_VAL  _)   (QUEST1_VAL  s)     = [QUEST1_VAL s]
+setAtt (QUEST2_VAL  _)   (QUEST2_VAL  s)     = [QUEST2_VAL s]
+setAtt (QUEST3_VAL  _)   (QUEST3_VAL  s)     = [QUEST3_VAL s]
+setAtt (QUEST6_VAL  _)   (QUEST6_VAL  s)     = [QUEST6_VAL s]
+
+setAtt (PREP_VAL _) (PREP_VAL s) = [PREP_VAL s]
+setAtt (PREPN_VAL _) (PREPN_VAL s) = [PREPN_VAL s]
+setAtt (PREPNPH_VAL _) (PREPNPH_VAL s) = [PREPNPH_VAL s]
+setAtt (PREPPH_VAL _) (PREPPH_VAL s) = [PREPPH_VAL s]
+setAtt (YEAR_VAL _) (YEAR_VAL s) = [YEAR_VAL s]
+
+setAtt (SUPERPHSTART_VAL _) (SUPERPHSTART_VAL s) = [SUPERPHSTART_VAL s]
+setAtt (SUPER_VAL _) (SUPER_VAL s) = [SUPER_VAL s]
+setAtt (SUPERPH_VAL _) (SUPERPH_VAL s) = [SUPERPH_VAL s]
+-}
+
+--appears that ErrorVal is used as a sort of sentinel value -- all things that attempt to set to this should be treated as an error
+--setAtt _ (ErrorVal s)   = [ErrorVal s]
+--------- *********************** --------------
+
+
+
+
+
+
+
