Comorphism.hs revision 1a38107941725211e7c3f051f7a8f5e12199f03a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
967e5f3c25249c779575864692935627004d3f9eChristian Maeder{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, DeriveDataTypeable
967e5f3c25249c779575864692935627004d3f9eChristian Maeder , FlexibleInstances, UndecidableInstances, ExistentialQuantification #-}
f11f713bebd8e1e623a0a4361065df256033de47Christian MaederModule : $Header$
97018cf5fa25b494adffd7e9b4e87320dae6bf47Christian MaederDescription : interface and class for logic translations
967e5f3c25249c779575864692935627004d3f9eChristian MaederCopyright : (c) Till Mossakowski, Uni Bremen 2002-2006
3f69b6948966979163bdfe8331c38833d5d90ecdChristian MaederLicense : GPLv2 or higher, see LICENSE.txt
967e5f3c25249c779575864692935627004d3f9eChristian MaederMaintainer : till@informatik.uni-bremen.de
89054b2b95a3f92e78324dc852f3d34704e2ca49Christian MaederStability : provisional
f3a94a197960e548ecd6520bb768cb0d547457bbChristian MaederPortability : non-portable (via Logic)
717686b54b9650402e2ebfbaadf433eab8ba5171Christian MaederCentral interface (type class) for logic translations (comorphisms) in Hets
967e5f3c25249c779575864692935627004d3f9eChristian Maeder These are just collections of
967e5f3c25249c779575864692935627004d3f9eChristian Maeder functions between (some of) the types of logics.
967e5f3c25249c779575864692935627004d3f9eChristian Maeder References: see Logic.hs
650bafe7709533bc5f82bb9daf8fa06f431cd963Christian Maeder ( CompComorphism (..)
9cb4aa4ea6685489a38f9b609f5dbe5d37f25bc7Christian Maeder , InclComorphism
7221c71b38c871ce66eee4537cb681d468308dfbChristian Maeder , inclusion_logic
ac19f8695aa1b2d2d1cd1319da2530edd8f46a96Christian Maeder , inclusion_source_sublogic
8b9fda012e5ee53b7b2320c0638896a0ff6e99f3Christian Maeder , inclusion_target_sublogic
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian Maeder , mkInclComorphism
4ef2a978e66e2246ff0b7f00c77deb7aabb28b8eChristian Maeder , mkIdComorphism
551af0e4ba6d96bb24f3555f3b30ed648e22e34aChristian Maeder , Comorphism (..)
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder , targetSublogic
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder , wrapMapTheory
ad270004874ce1d0697fb30d7309f180553bb315Christian Maeder , mkTheoryMapping
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder , AnyComorphism (..)
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder , idComorphism
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder , isIdComorphism
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder , isModelTransportable
967e5f3c25249c779575864692935627004d3f9eChristian Maeder , hasModelExpansion
551af0e4ba6d96bb24f3555f3b30ed648e22e34aChristian Maeder , isWeaklyAmalgamable
551af0e4ba6d96bb24f3555f3b30ed648e22e34aChristian Maeder , compComorphism
67d92da5e9610aabad39055a16031154b4dc3748Christian Maederimport qualified Data.Set as Set
67d92da5e9610aabad39055a16031154b4dc3748Christian Maederclass (Language cid,
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder Logic lid1 sublogics1
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder basic_spec1 sentence1 symb_items1 symb_map_items1
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1,
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder Logic lid2 sublogics2
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder basic_spec2 sentence2 symb_items2 symb_map_items2
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder sign2 morphism2 symbol2 raw_symbol2 proof_tree2) =>
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder Comorphism cid
7a879b08ae0ca30006f9be887a73212b07f10204Christian Maeder lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder lid2 sublogics2 basic_spec2 sentence2 symb_items2 symb_map_items2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sign2 morphism2 symbol2 raw_symbol2 proof_tree2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder | cid -> lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder lid2 sublogics2 basic_spec2 sentence2 symb_items2 symb_map_items2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sign2 morphism2 symbol2 raw_symbol2 proof_tree2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder {- source and target logic and sublogic
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder the source sublogic is the maximal one for which the comorphism works -}
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sourceLogic :: cid -> lid1
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sourceSublogic :: cid -> sublogics1
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sourceSublogic cid = top_sublogic $ sourceLogic cid
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder minSourceTheory :: cid -> Maybe (LibName, String)
7a879b08ae0ca30006f9be887a73212b07f10204Christian Maeder minSourceTheory _ = Nothing
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder targetLogic :: cid -> lid2
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder {- finer information of target sublogics corresponding to source sublogics
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder this function must be partial because mapTheory is partial -}
a89389521ddf76109168a0b339031575aafbd512Christian Maeder mapSublogic :: cid -> sublogics1 -> Maybe sublogics2
a89389521ddf76109168a0b339031575aafbd512Christian Maeder mapSublogic cid _ = Just $ top_sublogic $ targetLogic cid
a89389521ddf76109168a0b339031575aafbd512Christian Maeder {- the translation functions are partial
a89389521ddf76109168a0b339031575aafbd512Christian Maeder because the target may be a sublanguage
a89389521ddf76109168a0b339031575aafbd512Christian Maeder map_basic_spec :: cid -> basic_spec1 -> Result basic_spec2
a89389521ddf76109168a0b339031575aafbd512Christian Maeder cover theoroidal comorphisms as well -}
a89389521ddf76109168a0b339031575aafbd512Christian Maeder map_theory :: cid -> (sign1, [Named sentence1])
a89389521ddf76109168a0b339031575aafbd512Christian Maeder -> Result (sign2, [Named sentence2])
a89389521ddf76109168a0b339031575aafbd512Christian Maeder -- map_theory but also consider sentence marks
a89389521ddf76109168a0b339031575aafbd512Christian Maeder mapMarkedTheory :: cid -> (sign1, [Named sentence1])
a89389521ddf76109168a0b339031575aafbd512Christian Maeder -> Result (sign2, [Named sentence2])
a89389521ddf76109168a0b339031575aafbd512Christian Maeder mapMarkedTheory cid (sig, sens) = do
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder (sig2, sens2) <- map_theory cid (sig, map unmark sens)
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder return (sig2, map (markSen $ language_name cid) sens2)
a89389521ddf76109168a0b339031575aafbd512Christian Maeder map_morphism :: cid -> morphism1 -> Result morphism2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder map_morphism = mapDefaultMorphism
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder map_sentence :: cid -> sign1 -> sentence1 -> Result sentence2
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder {- also covers semi-comorphisms
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder with no sentence translation
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian Maeder - but these are spans! -}
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder map_sentence = failMapSentence
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder map_symbol :: cid -> sign1 -> symbol1 -> Set.Set symbol2
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder map_symbol = errMapSymbol
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maeder extractModel :: cid -> sign1 -> proof_tree2
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder -> Result (sign1, [Named sentence1])
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder extractModel cid _ _ = fail
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder $ "extractModel not implemented for comorphism "
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder ++ language_name cid
67086e0fe40a985c5e8a3cf50e611f43234580c2Christian Maeder -- properties of comorphisms
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder is_model_transportable :: cid -> Bool
5e26bfc8d7b18cf3a3fa7b919b4450fb669f37a5Christian Maeder {- a comorphism (\phi, \alpha, \beta) is model-transportable
e7ce154edb906685b3fa7f6c0a764e18a4658068Christian Maeder if for any signature \Sigma,
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder any \Sigma-model M and any \phi(\Sigma)-model N
67086e0fe40a985c5e8a3cf50e611f43234580c2Christian Maeder for any isomorphism h : \beta_\Sigma(N) -> M
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder there exists an isomorphism h': N -> M' such that \beta_\Sigma(h') = h -}
67086e0fe40a985c5e8a3cf50e611f43234580c2Christian Maeder is_model_transportable _ = False
67086e0fe40a985c5e8a3cf50e611f43234580c2Christian Maeder has_model_expansion :: cid -> Bool
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder has_model_expansion _ = False
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder is_weakly_amalgamable :: cid -> Bool
67086e0fe40a985c5e8a3cf50e611f43234580c2Christian Maeder is_weakly_amalgamable _ = False
67086e0fe40a985c5e8a3cf50e611f43234580c2Christian Maeder constituents :: cid -> [String]
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder constituents cid = [language_name cid]
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder isInclusionComorphism :: cid -> Bool
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder isInclusionComorphism _ = False
d48085f765fca838c1d972d2123601997174583dChristian MaedertargetSublogic :: Comorphism cid
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
d48085f765fca838c1d972d2123601997174583dChristian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1
d48085f765fca838c1d972d2123601997174583dChristian Maeder lid2 sublogics2 basic_spec2 sentence2 symb_items2 symb_map_items2
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder sign2 morphism2 symbol2 raw_symbol2 proof_tree2
d48085f765fca838c1d972d2123601997174583dChristian Maeder => cid -> sublogics2
717686b54b9650402e2ebfbaadf433eab8ba5171Christian MaedertargetSublogic cid = fromMaybe (top_sublogic $ targetLogic cid)
717686b54b9650402e2ebfbaadf433eab8ba5171Christian Maeder $ mapSublogic cid $ sourceSublogic cid
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder-- | this function is based on 'map_theory' using no sentences as input
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maedermap_sign :: Comorphism cid
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder lid2 sublogics2 basic_spec2 sentence2 symb_items2 symb_map_items2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sign2 morphism2 symbol2 raw_symbol2 proof_tree2
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder => cid -> sign1 -> Result (sign2, [Named sentence2])
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maedermap_sign cid sign = wrapMapTheory cid (sign, [])
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian MaedermapDefaultMorphism :: Comorphism cid
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
67d92da5e9610aabad39055a16031154b4dc3748Christian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder lid2 sublogics2 basic_spec2 sentence2 symb_items2 symb_map_items2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sign2 morphism2 symbol2 raw_symbol2 proof_tree2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder => cid -> morphism1 -> Result morphism2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian MaedermapDefaultMorphism cid mor = do
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder (sig1, _) <- map_sign cid $ dom mor
f11f713bebd8e1e623a0a4361065df256033de47Christian Maeder (sig2, _) <- map_sign cid $ cod mor
0a8ea95bcf0e3f84fed0b725c049ec2a956a4a28Christian Maeder inclusion (targetLogic cid) sig1 sig2
18b513ff41708f24e1a7407f36b719add813ffeaChristian MaederfailMapSentence :: Comorphism cid
dedabc954aa15f6ad0764472a9434dc6dafe3db2Christian Maeder lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder lid2 sublogics2 basic_spec2 sentence2 symb_items2 symb_map_items2
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder sign2 morphism2 symbol2 raw_symbol2 proof_tree2
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder => cid -> sign1 -> sentence1 -> Result sentence2
e1839fb37a3a2ccd457464cb0dcc5efd466dbe22Christian MaederfailMapSentence cid _ _ =
a89e661aad28f1b39f4fc9f9f9a4d46074234123Christian Maeder fail $ "Unsupported sentence translation " ++ show cid
58b5ac21d1c88344246aaedab0c0bdc7b759d7c6Christian MaedererrMapSymbol :: Comorphism cid
58b5ac21d1c88344246aaedab0c0bdc7b759d7c6Christian Maeder lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
58b5ac21d1c88344246aaedab0c0bdc7b759d7c6Christian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1
58b5ac21d1c88344246aaedab0c0bdc7b759d7c6Christian Maeder lid2 sublogics2 basic_spec2 sentence2 symb_items2 symb_map_items2
f2ee9fc53048ea92bad79e3f5d292d83efd7f8beMihai Codescu sign2 morphism2 symbol2 raw_symbol2 proof_tree2
58b5ac21d1c88344246aaedab0c0bdc7b759d7c6Christian Maeder => cid -> sign1 -> symbol1 -> Set.Set symbol2
81d182b21020b815887e9057959228546cf61b6bChristian MaedererrMapSymbol cid _ _ = error $ "no symbol mapping for " ++ show cid
242397ba0f1cc490e892130bf0df239deeecf5daChristian Maeder-- | use this function instead of 'mapMarkedTheory'
2e9985cd67e4f2414becb670ef33b8f16513e41dChristian MaederwrapMapTheory :: Comorphism cid
242397ba0f1cc490e892130bf0df239deeecf5daChristian Maeder lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
551af0e4ba6d96bb24f3555f3b30ed648e22e34aChristian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1
551af0e4ba6d96bb24f3555f3b30ed648e22e34aChristian Maeder lid2 sublogics2 basic_spec2 sentence2 symb_items2 symb_map_items2
58b5ac21d1c88344246aaedab0c0bdc7b759d7c6Christian Maeder sign2 morphism2 symbol2 raw_symbol2 proof_tree2
58b5ac21d1c88344246aaedab0c0bdc7b759d7c6Christian Maeder => cid -> (sign1, [Named sentence1])
46111e8a73bc638bbd49d93d8b2f0032181a67bbChristian Maeder -> Result (sign2, [Named sentence2])
551af0e4ba6d96bb24f3555f3b30ed648e22e34aChristian MaederwrapMapTheory cid (sign, sens) =
58b5ac21d1c88344246aaedab0c0bdc7b759d7c6Christian Maeder let res = mapMarkedTheory cid (sign, sens)
551af0e4ba6d96bb24f3555f3b30ed648e22e34aChristian Maeder lid1 = sourceLogic cid
551af0e4ba6d96bb24f3555f3b30ed648e22e34aChristian Maeder thDoc = show (vcat $ pretty sign : map (print_named lid1) sens)
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder if isIdComorphism $ Comorphism cid then res else case sourceSublogic cid of
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder sub -> case minSublogic sign of
58b5ac21d1c88344246aaedab0c0bdc7b759d7c6Christian Maeder sigLog -> case foldl lub sigLog
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder $ map (minSublogic . sentence) sens of
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder if isSubElem senLog sub
dedabc954aa15f6ad0764472a9434dc6dafe3db2Christian Maeder [ Diag Hint thDoc nullRange
7221c71b38c871ce66eee4537cb681d468308dfbChristian Maeder ("for '" ++ language_name cid ++
7221c71b38c871ce66eee4537cb681d468308dfbChristian Maeder "' expected sublogic '" ++
18b513ff41708f24e1a7407f36b719add813ffeaChristian Maeder sublogicName sub ++
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder "'\n but found sublogic '" ++
842eedc62639561781b6c33533d1949693ef6cc5Christian Maeder sublogicName senLog ++
42c01284bba8d7c8d995c8dfb96ace57d28ed1bcTill Mossakowski "' with signature sublogic '" ++
842eedc62639561781b6c33533d1949693ef6cc5Christian Maeder sublogicName sigLog ++ "'") nullRange] Nothing
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian MaedermkTheoryMapping :: Monad m => (sign1 -> m (sign2, [Named sentence2]))
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder -> (sign1 -> sentence1 -> m sentence2)
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder -> (sign1, [Named sentence1])
842eedc62639561781b6c33533d1949693ef6cc5Christian Maeder -> m (sign2, [Named sentence2])
bfa9e03532243ceb487f0384d0f6a447f1ce7670Till MossakowskimkTheoryMapping mapSig mapSen (sign, sens) = do
967e5f3c25249c779575864692935627004d3f9eChristian Maeder (sign', sens') <- mapSig sign
967e5f3c25249c779575864692935627004d3f9eChristian Maeder sens'' <- mapM (mapNamedM (mapSen sign) . unmark) sens
f2ee9fc53048ea92bad79e3f5d292d83efd7f8beMihai Codescu return (sign', nameAndDisambiguate
967e5f3c25249c779575864692935627004d3f9eChristian Maeder $ map (markSen "SignatureProperty") sens' ++ sens'')
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maederdata InclComorphism lid sublogics = InclComorphism
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder { inclusion_logic :: lid
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder , inclusion_source_sublogic :: sublogics
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder , inclusion_target_sublogic :: sublogics }
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder deriving (Show, Typeable, Data)
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder-- | construction of an identity comorphism
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian MaedermkIdComorphism :: (Logic lid sublogics
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder basic_spec sentence symb_items symb_map_items
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder sign morphism symbol raw_symbol proof_tree) =>
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder lid -> sublogics -> InclComorphism lid sublogics
967e5f3c25249c779575864692935627004d3f9eChristian MaedermkIdComorphism lid sub = InclComorphism
967e5f3c25249c779575864692935627004d3f9eChristian Maeder { inclusion_logic = lid
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder , inclusion_source_sublogic = sub
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder , inclusion_target_sublogic = sub }
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder-- | construction of an inclusion comorphism
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian MaedermkInclComorphism :: (Logic lid sublogics
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder basic_spec sentence symb_items symb_map_items
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder sign morphism symbol raw_symbol proof_tree,
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder lid -> sublogics -> sublogics
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder -> m (InclComorphism lid sublogics)
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian MaedermkInclComorphism lid srcSub trgSub =
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder if isSubElem srcSub trgSub
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder then return InclComorphism
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder { inclusion_logic = lid
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder , inclusion_source_sublogic = srcSub
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder , inclusion_target_sublogic = trgSub }
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder else fail ("mkInclComorphism: first sublogic must be a " ++
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder "subElem of the second sublogic")
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maederinstance (Language lid, Eq sublogics, Show sublogics, SublogicName sublogics)
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder => Language (InclComorphism lid sublogics) where
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder language_name (InclComorphism lid sub_src sub_trg) =
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder let sblName = sublogicName sub_src
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder lname = language_name lid
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder in if sub_src == sub_trg
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder then "id_" ++ lname ++
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder if null sblName then "" else '.' : sblName
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder else "incl_" ++ lname ++ ':'
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder : sblName ++ "->" ++ sublogicName sub_trg
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maederinstance Logic lid sublogics
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder basic_spec sentence symb_items symb_map_items
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder sign morphism symbol raw_symbol proof_tree =>
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder Comorphism (InclComorphism lid sublogics)
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder lid sublogics
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder basic_spec sentence symb_items symb_map_items
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sign morphism symbol raw_symbol proof_tree
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder lid sublogics
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder basic_spec sentence symb_items symb_map_items
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder sign morphism symbol raw_symbol proof_tree
9659c509ce5e78adc51d7b02a76274eddcba9338Christian Maeder sourceLogic = inclusion_logic
9659c509ce5e78adc51d7b02a76274eddcba9338Christian Maeder targetLogic = inclusion_logic
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder sourceSublogic = inclusion_source_sublogic
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder mapSublogic cid subl =
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder if isSubElem subl $ inclusion_source_sublogic cid
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder then Just subl
9659c509ce5e78adc51d7b02a76274eddcba9338Christian Maeder map_theory _ = return
551af0e4ba6d96bb24f3555f3b30ed648e22e34aChristian Maeder map_morphism _ = return
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder map_sentence _ _ = return
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder map_symbol _ _ = Set.singleton
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder constituents cid =
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder if inclusion_source_sublogic cid
83814002b4922114cbe7e9ba728472a0bf44aac5Christian Maeder == inclusion_target_sublogic cid
a95f5379cabb30d3beb0545002cf50e9e4fc2c86Christian Maeder else [language_name cid]
97ee7048e63953c5617342ce38c30cbcb35cc0beChristian Maeder is_model_transportable _ = True
97ee7048e63953c5617342ce38c30cbcb35cc0beChristian Maeder has_model_expansion _ = True
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder is_weakly_amalgamable _ = True
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder isInclusionComorphism _ = True
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maederdata CompComorphism cid1 cid2 = CompComorphism cid1 cid2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder deriving (Show, Typeable, Data)
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maederinstance (Language cid1, Language cid2)
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder => Language (CompComorphism cid1 cid2) where
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder language_name (CompComorphism cid1 cid2) =
b66eb6038bfbcd2fe520d87c151bb4f1f510e985Christian Maeder language_name cid1 ++ ";" ++ language_name cid2
2dfc7b04f2db681992ca04175f2beb0f127c9844Christian Maederinstance (Comorphism cid1
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder lid1 sublogics1 basic_spec1 sentence1 symb_items1 symb_map_items1
dedabc954aa15f6ad0764472a9434dc6dafe3db2Christian Maeder sign1 morphism1 symbol1 raw_symbol1 proof_tree1
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder lid2 sublogics2 basic_spec2 sentence2 symb_items2 symb_map_items2
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder sign2 morphism2 symbol2 raw_symbol2 proof_tree2,
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder Comorphism cid2
1a75698c909ad515d59c76e65bd783f015c21c4dChristian Maeder lid4 sublogics4 basic_spec4 sentence4 symb_items4 symb_map_items4
588c0c022a0f4e129a89c3bc569daf6a835e182dChristian Maeder sign4 morphism4 symbol4 raw_symbol4 proof_tree4
ad187062b0009820118c1b773a232e29b879a2faChristian Maeder lid3 sublogics3 basic_spec3 sentence3 symb_items3 symb_map_items3
07b72edb610ee53b4832d132e96b0a3d8423f8ebChristian Maeder sign3 morphism3 symbol3 raw_symbol3 proof_tree3)
_ -> error "CompComorphism.map_sentence"
in Set.unions
(Set.toList (map_symbol cid1 sig1 s1)))