-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathLogic_HasCASL.hs
179 lines (146 loc) · 5.69 KB
/
Logic_HasCASL.hs
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
{-# LANGUAGE MultiParamTypeClasses #-}
{- |
Module : ./HasCASL/Logic_HasCASL.hs
Description : instance of class Logic
Copyright : (c) Christian Maeder and Uni Bremen 2003-2005
License : GPLv2 or higher, see LICENSE.txt
Maintainer : Christian.Maeder@dfki.de
Stability : experimental
Portability : non-portable (imports Logic.Logic)
Here is the place where the class Logic is instantiated for HasCASL.
Also the instances for Syntax and Category.
-}
module HasCASL.Logic_HasCASL (HasCASL (HasCASL)) where
import HasCASL.As
import HasCASL.Builtin
import HasCASL.Le
import HasCASL.PrintLe
import HasCASL.AsToLe
import HasCASL.RawSym
import HasCASL.SymbItem
import HasCASL.Symbol
import HasCASL.ParseItem
import HasCASL.Morphism
import HasCASL.ATC_HasCASL ()
import HasCASL.SymbolMapAnalysis
import HasCASL.Sublogic
import HasCASL.SimplifyTerm
import HasCASL.Merge
import HasCASL.ToItem
import Logic.Logic
import Common.Doc
import Common.DocUtils
import Data.Monoid ()
data HasCASL = HasCASL deriving Show
instance Language HasCASL where
description _ = unlines
[ "HasCASL - Algebraic Specification + Functional Programming"
, " = Environment for Formal Software Development"
, "This logic is based on the partial lambda calculus and"
, " features subtyping, overloading and type class polymorphism"
, "See the HasCASL summary and further papers available at"
, " http://www.informatik.uni-bremen.de/cofi/HasCASL"
, ""
, "Abbreviations of sublogic names indicate the following feature:"
, " Sub -> with subtyping"
, " P -> with partial functions"
, " TyCl -> with simple type classes (a la Isabelle)"
, " CoCl -> with constructor classes (a la Haskell)"
, " Poly -> polymorphism without classes"
, " TyCons -> user definable type constructors"
, " HOL -> higher order logic (covers sort generation constraints)"
, " FOL -> first order logic"
, "and others like for CASL"
, ""
, "Examples:"
, " SubCFOL= -> the CASL logic without sort generation constraints"
, " PCoClTyConsHOL -> the Haskell type system fragment" ]
instance Semigroup BasicSpec where
(BasicSpec l1) <> (BasicSpec l2) = BasicSpec $ l1 ++ l2
instance Monoid BasicSpec where
mempty = BasicSpec []
instance Syntax HasCASL BasicSpec
Symbol SymbItems SymbMapItems
where
parse_basic_spec HasCASL = Just $ const basicSpec
parse_symb_items HasCASL = Just . const $ symbItems
parse_symb_map_items HasCASL = Just . const $ symbMapItems
toItem HasCASL = bsToItem
instance Category Env Morphism where
ide = ideMor
composeMorphisms = compMor
isInclusion = isInclMor
dom = msource
cod = mtarget
legal_mor = legalMor
instance Sentences HasCASL Sentence Env Morphism Symbol where
map_sen HasCASL = mapSentence
simplify_sen HasCASL = simplifySentence
print_named _ = printSemiAnno (changeGlobalAnnos addBuiltins . pretty) True
. fromLabelledSen
sym_name HasCASL = symName
symKind HasCASL = show . pretty . symbTypeToKind . symType
sym_of HasCASL = symOf
mostSymsOf HasCASL = mostSyms
symmap_of HasCASL = morphismToSymbMap
instance StaticAnalysis HasCASL BasicSpec Sentence
SymbItems SymbMapItems
Env
Morphism
Symbol RawSymbol where
basic_analysis HasCASL = Just basicAnalysis
signature_union HasCASL = merge
signatureDiff HasCASL s = return . diffEnv s
empty_signature HasCASL = initialEnv
induced_from_to_morphism HasCASL = inducedFromToMorphism
induced_from_morphism HasCASL = inducedFromMorphism
morphism_union HasCASL = morphismUnion
is_subsig HasCASL = isSubEnv
subsig_inclusion HasCASL s = return . mkMorphism s
cogenerated_sign HasCASL = cogeneratedSign
generated_sign HasCASL = generatedSign
stat_symb_map_items HasCASL e _ = statSymbMapItems e
stat_symb_items HasCASL = statSymbItems
symbol_to_raw HasCASL = symbolToRaw
id_to_raw HasCASL = idToRaw
matches HasCASL = matchSymb
final_union HasCASL = merge
instance SemiLatticeWithTop Sublogic where
lub s = sublogicUp . sublogic_max s
top = topLogic
instance SublogicName Sublogic where
sublogicName = sublogic_name
instance MinSublogic Sublogic BasicSpec where
minSublogic = sl_basicSpec
instance MinSublogic Sublogic Sentence where
minSublogic = sl_sentence
instance MinSublogic Sublogic SymbItems where
minSublogic = sl_symbItems
instance MinSublogic Sublogic SymbMapItems where
minSublogic = sl_symbMapItems
instance MinSublogic Sublogic Env where
minSublogic = sl_env
instance MinSublogic Sublogic Morphism where
minSublogic = sl_morphism
instance MinSublogic Sublogic Symbol where
minSublogic = sl_symbol
instance ProjectSublogic Sublogic BasicSpec where
projectSublogic = error "ProjectSublogic Sublogic BasicSpec"
instance ProjectSublogicM Sublogic SymbItems where
projectSublogicM = error " ProjectSublogicM Sublogic SymbItems"
instance ProjectSublogicM Sublogic SymbMapItems where
projectSublogicM = error " ProjectSublogicM Sublogic SymbMapItems"
instance ProjectSublogic Sublogic Env where
projectSublogic = error "ProjectSublogic Sublogic Env"
instance ProjectSublogic Sublogic Morphism where
projectSublogic = error "ProjectSublogic Sublogic Morphism"
instance ProjectSublogicM Sublogic Symbol where
projectSublogicM = error " ProjectSublogicM Sublogic Symbol"
instance Logic HasCASL Sublogic
BasicSpec Sentence SymbItems SymbMapItems
Env
Morphism
Symbol RawSymbol () where
stability _ = Stable
all_sublogics _ = sublogics_all
empty_proof_tree _ = ()