@@ -49,14 +49,6 @@ import Data.Void
49
49
import Language.CQL.Common
50
50
import Prelude hiding (EQ )
51
51
52
- data RawTerm = RawApp String [RawTerm ]
53
- deriving Eq
54
-
55
- instance Show RawTerm where
56
- show (RawApp sym az) = show sym ++ " (" ++ (intercalate " ," . fmap show $ az) ++ " )"
57
-
58
- --------------------------------------------------------------------------------------------
59
- -- Terms
60
52
61
53
data Term var ty sym en fk att gen sk
62
54
-- | Variable.
@@ -86,48 +78,40 @@ data Head ty sym en fk att gen sk
86
78
| HSk sk
87
79
deriving (Eq , Ord )
88
80
89
- instance TyMap NFData '[var , ty , sym , en , fk , att , gen , sk ] =>
90
- NFData (Term var ty sym en fk att gen sk ) where
91
- rnf x = case x of
92
- Var v -> rnf v
93
- Sym f a -> let _ = rnf f in rnf a
94
- Fk f a -> let _ = rnf f in rnf a
95
- Att f a -> let _ = rnf f in rnf a
96
- Gen a -> rnf a
97
- Sk a -> rnf a
98
-
99
- instance TyMap NFData '[var , ty , sym , en , fk , att , gen , sk ] =>
100
- NFData (EQ var ty sym en fk att gen sk ) where
101
- rnf (EQ (x, y)) = deepseq x $ rnf y
102
-
103
-
104
- instance TyMap Show '[var , ty , sym , en , fk , att , gen , sk ] =>
105
- Show (Term var ty sym en fk att gen sk )
106
- where
107
- show x = case x of
108
- Var v -> show' v
109
- Gen g -> show' g
110
- Sk s -> show' s
111
- Fk fk a -> show' a ++ " ." ++ show' fk
112
- Att att a -> show' a ++ " ." ++ show' att
113
- Sym sym [] -> show' sym
114
- Sym sym az -> show' sym ++ " (" ++ (intercalate " ," . fmap show' $ az) ++ " )"
115
- where
116
-
117
- show' :: Show a => a -> String
118
- show' = dropQuotes . show
81
+ deriving instance TyMap Eq '[var , sym , fk , att , gen , sk ] => Eq (Term var ty sym en fk att gen sk )
119
82
120
83
deriving instance TyMap Ord '[var , ty , sym , en , fk , att , gen , sk ] => Ord (Term var ty sym en fk att gen sk )
121
84
122
- instance (Show ty , Show sym , Show en , Show fk , Show att , Show gen , Show sk )
123
- => Show (Head ty sym en fk att gen sk ) where
85
+ instance TyMap NFData '[var , ty , sym , en , fk , att , gen , sk ] => NFData (Term var ty sym en fk att gen sk ) where
86
+ rnf x = case x of
87
+ Var v -> rnf v
88
+ Sym f a -> let _ = rnf f in rnf a
89
+ Fk f a -> let _ = rnf f in rnf a
90
+ Att f a -> let _ = rnf f in rnf a
91
+ Gen a -> rnf a
92
+ Sk a -> rnf a
93
+
94
+ instance TyMap Show '[var , ty , sym , en , fk , att , gen , sk ] => Show (Term var ty sym en fk att gen sk ) where
95
+ show x = case x of
96
+ Var v -> show' v
97
+ Gen g -> show' g
98
+ Sk s -> show' s
99
+ Fk fk a -> show' a ++ " ." ++ show' fk
100
+ Att att a -> show' a ++ " ." ++ show' att
101
+ Sym sym [] -> show' sym
102
+ Sym sym az -> show' sym ++ " (" ++ (intercalate " ," . fmap show' $ az) ++ " )"
103
+
104
+ instance TyMap Show '[ty , sym , en , fk , att , gen , sk ] => Show (Head ty sym en fk att gen sk ) where
124
105
show x = case x of
125
106
HSym sym -> show' sym
126
107
HFk fk -> show' fk
127
108
HAtt att -> show' att
128
109
HGen gen -> show' gen
129
110
HSk sk -> show' sk
130
111
112
+ show' :: Show a => a -> String
113
+ show' = dropQuotes . show
114
+
131
115
-- | Maps functions through a term.
132
116
mapTerm
133
117
:: (var -> var' )
@@ -208,7 +192,7 @@ hasTypeType'' t = case t of
208
192
Fk _ _ -> False
209
193
210
194
----------------------------------------------------------------------------------------------------------
211
- -- Substitution and simplification of theories
195
+ -- Substitution and simplification on terms
212
196
213
197
-- | Experimental
214
198
subst2
@@ -268,6 +252,41 @@ occurs h x = case x of
268
252
Att h' a -> h == HAtt h' || occurs h a
269
253
Sym h' as -> h == HSym h' || any (occurs h) as
270
254
255
+
256
+ --------------------------------------------------------------------------------------------------------------------
257
+ -- Equality, especially on Terms
258
+
259
+ -- | A value of this type means the lhs and rhs are equal.
260
+ -- One reason for its existence is to allow pretty-printing.
261
+ type EQ var ty sym en fk att gen sk = EQF (Term var ty sym en fk att gen sk )
262
+
263
+ newtype EQF a = EQ (a , a )
264
+
265
+ instance Functor EQF where
266
+ fmap f (EQ (l, r)) = EQ (f l, f r)
267
+
268
+ instance (Show a ) => Show (EQF a ) where
269
+ show (EQ (lhs, rhs)) = show lhs ++ " = " ++ show rhs
270
+
271
+ deriving instance (Ord a ) => Ord (EQF a )
272
+
273
+ deriving instance (Eq a ) => Eq (EQF a )
274
+
275
+ instance TyMap NFData '[var , ty , sym , en , fk , att , gen , sk ] => NFData (EQ var ty sym en fk att gen sk ) where
276
+ rnf (EQ (x, y)) = deepseq x $ rnf y
277
+
278
+ hasTypeType' :: EQ Void ty sym en fk att gen sk -> Bool
279
+ hasTypeType' (EQ (lhs, _)) = hasTypeType lhs
280
+
281
+
282
+ --------------------------------------------------------------------------------------------------------------------
283
+ -- Theories
284
+
285
+ type Theory var ty sym en fk att gen sk = Set (Ctx var (ty + en ), EQ var ty sym en fk att gen sk )
286
+
287
+ -- TODO wrap Map class to throw an error (or do something less ad hoc) if a key is ever inserted twice
288
+ type Ctx k v = Map k v
289
+
271
290
-- | If there is one, finds an equation of the form @empty |- gen/sk = term@,
272
291
-- where @gen@ does not occur in @term@.
273
292
findSimplifiableEq
@@ -367,31 +386,10 @@ instance Up x (x + y) where
367
386
instance Up y (x + y ) where
368
387
upgr = Right
369
388
370
- --------------------------------------------------------------------------------------------------------------------
371
- -- Theories
372
-
373
- type Theory var ty sym en fk att gen sk = Set (Ctx var (ty + en ), EQ var ty sym en fk att gen sk )
374
-
375
- -- TODO wrap Map class to throw an error (or do something less ad hoc) if a key is ever put twice
376
- type Ctx k v = Map k v
377
-
378
- -- | A value of this type means the lhs and rhs are equal.
379
- -- One reason for its existence is to allow pretty-printing.
380
- type EQ var ty sym en fk att gen sk = EQF (Term var ty sym en fk att gen sk )
389
+ --------------------------------------------------------------------------------
381
390
382
- newtype EQF a = EQ (a , a )
383
-
384
- instance Functor EQF where
385
- fmap f (EQ (l, r)) = EQ (f l, f r)
386
-
387
- instance (Show a ) => Show (EQF a ) where
388
- show (EQ (lhs, rhs)) = show lhs ++ " = " ++ show rhs
389
-
390
- deriving instance (Ord a ) => Ord (EQF a )
391
-
392
- deriving instance (Eq a ) => Eq (EQF a )
393
-
394
- deriving instance TyMap Eq '[var , sym , fk , att , gen , sk ] => Eq (Term var ty sym en fk att gen sk )
391
+ data RawTerm = RawApp String [RawTerm ]
392
+ deriving Eq
395
393
396
- hasTypeType' :: EQ Void ty sym en fk att gen sk -> Bool
397
- hasTypeType' ( EQ (lhs, _)) = hasTypeType lhs
394
+ instance Show RawTerm where
395
+ show ( RawApp sym az) = show sym ++ " ( " ++ (intercalate " , " . fmap show $ az) ++ " ) "
0 commit comments