131 % enough. Leave out details, even if it means being less precise than |
131 % enough. Leave out details, even if it means being less precise than |
132 % you think necessary. |
132 % you think necessary. |
133 % - If you omit details that are vital to the proof/implementation, |
133 % - If you omit details that are vital to the proof/implementation, |
134 % just say so once. Everybody will be happy with that. |
134 % just say so once. Everybody will be happy with that. |
135 |
135 |
136 \section[Introduction]{Introduction} |
136 \section[Introduction]{Introduction: Isabelle and \isac} |
137 \subsection[Isabelle \& \isac]{Isabelle and \isac} |
137 %\subsection[Isabelle \& \isac]{Isabelle and \isac} |
138 \begin{frame} |
138 \begin{frame} |
139 \frametitle{Isabelle and \isac} |
139 \frametitle{Isabelle and \isac} |
140 \begin{itemize} |
140 The task of this ``Projektpraktikum'' (6 ECTS) was to |
141 \item Computer Theorem Prover Isabelle |
141 \begin{itemize} |
142 \item Math Learning Assistent \isac |
142 \item study the concept of ``context'' in the theorem prover \textbf{Isabelle} from TU Munich |
143 \end{itemize} |
143 \item study basic concepts of the math assistant \sisac{} from TU Graz |
144 \end{frame} |
144 \pause |
145 |
145 \item redesign \sisac{} with respect to contexts |
146 \subsection[Computation \& Deduction]{Computation and Deduction in a Lucas-Interpreter} |
146 \begin{itemize} |
|
147 \item use contexts for type inference of user input |
|
148 \item handle preconditions of specifications |
|
149 \item clarify the transfer of context data from sub-programs to the calling program |
|
150 \end{itemize} |
|
151 \pause |
|
152 \item introduce contexts to \sisac{} according to the new design |
|
153 \item use the coding standards of Isabelle2011 for new code. |
|
154 \end{itemize} |
|
155 \end{frame} |
|
156 |
|
157 %\subsection[Computation \& Deduction]{Computation and Deduction in a Lucas-Interpreter} |
147 \begin{frame} |
158 \begin{frame} |
148 \frametitle{Computation and Deduction in a Lucas-Interpreter} |
159 \frametitle{Computation and Deduction in a Lucas-Interpreter} |
149 \includegraphics[width=100mm]{overview.pdf} |
160 \includegraphics[width=100mm]{overview.pdf} |
150 \end{frame} |
161 \end{frame} |
151 |
162 |
152 \section[Contributions]{Contributions of the project} |
163 \section[Contributions]{Contributions of the project to \isac} |
153 \subsection[Contexts]{Introduction of Isabelle Contexts} |
164 \subsection[Contexts]{Isabelle's Contexts, advantages and use} |
154 \begin{frame} |
165 \begin{frame} |
155 \frametitle{Introduction of Isabelle Contexts} |
166 \frametitle{Advantages of Isabelle's Contexts} |
156 \begin{itemize} |
167 Isabelle's context replaced theories because \dots: |
157 \item theories too general |
168 \begin{itemize} |
158 \item not capable of type inference |
169 \item theories are static containers of \textit{all} logical data |
159 \item replace function \texttt{parseNEW} |
170 \item contexts are \textit{dynamic} containers of logical data: |
160 \item assumptions \& environment $\rightarrow$ context |
171 \begin{itemize} |
161 \end{itemize} |
172 \item functions for storing and retrieving various logical data |
162 \end{frame} |
173 \item functions for type inference |
163 |
174 \item provide data for Isabelle's automated provers |
164 \begin{frame} |
175 \end{itemize} |
165 \frametitle{Code Snippets: \texttt{parse}} |
176 %\item e.g. theories have no direct functions for type inference |
166 \texttt{\tiny{ |
177 %\item replace function \texttt{parseNEW} |
|
178 %\item assumptions \& environment $\rightarrow$ context |
|
179 \item allow to conform with scopes for subprograms. |
|
180 \end{itemize} |
|
181 \end{frame} |
|
182 |
|
183 \begin{frame} |
|
184 \frametitle{Isabelle's context mechanism} |
|
185 \texttt{\small{ |
167 \begin{tabbing} |
186 \begin{tabbing} |
168 xx\=xx\=xx\=xx\=\kill |
187 xx\=xx\=in\=\kill |
|
188 %xx\=xx\=xx\=xx\=\kill |
|
189 %datatype Isac\_Ctxt =\\ |
|
190 %\>\>Env of term * term\\ |
|
191 %\>| Asm of term;\\ |
|
192 %\\ |
|
193 structure ContextData = \alert{Proof\_Data}\\ |
|
194 \>~(\alert{type T} = term list\\ |
|
195 \>\>\alert{fun init \_} = []);\\ |
|
196 \\ |
|
197 %local\\ |
|
198 %\>fun insert\_ctxt data = ContextData\alert{.map} (fn xs => distinct (data@xs));\\ |
|
199 %in\\ |
|
200 %\>fun insert\_assumptions asms = map (fn t => Asm t) asms |> insert\_ctxt;\\ |
|
201 %\>fun insert\_environments envs = map (fn t => Env t) envs |> insert\_ctxt;\\ |
|
202 %end\\ |
|
203 fun insert\_assumptions asms = \\ |
|
204 \>\>\>ContextData\alert{.map} (fn xs => distinct (data@xs));\\ |
|
205 \\ |
|
206 %local\\ |
|
207 %\>fun unpack\_asms (Asm t::ts) = t::(unpack\_asms ts)\\ |
|
208 %\>\>| unpack\_asms (Env \_::ts) = unpack\_asms ts\\ |
|
209 %\>\>| unpack\_asms [] = [];\\ |
|
210 %\>fun unpack\_envs (Env t::ts) = t::(unpack\_envs ts)\\ |
|
211 %\>\>| unpack\_envs (Asm \_::ts) = unpack\_envs ts\\ |
|
212 %\>\>| unpack\_envs [] = [];\\ |
|
213 %in\\ |
|
214 %\>fun get\_assumptions ctxt = ContextData.get ctxt |> unpack\_asms;\\ |
|
215 %\>fun get\_environments ctxt = ContextData.get ctxt |> unpack\_envs;\\ |
|
216 %end |
|
217 fun get\_assumptions ctxt = ContextData\alert{.get} ctxt;\\ |
|
218 \\ |
|
219 \\ |
|
220 val declare\_constraints : \\ |
|
221 \>\>\>term -> Proof.context -> Proof.context |
|
222 \end{tabbing} |
|
223 }} |
|
224 \end{frame} |
|
225 |
|
226 \begin{frame} |
|
227 \frametitle{Usage of Contexts} |
|
228 \texttt{\footnotesize{ |
|
229 \begin{tabbing} |
|
230 xx\=xx\=xx\=xx\=xx\=\kill |
|
231 fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\ |
|
232 \> let\\ |
|
233 \>\> val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\ |
|
234 \>\> fun transfer [] to\_ctxt = to\_ctxt\\ |
|
235 \>\>\> | transfer (from\_asm::fas) to\_ctxt =\\ |
|
236 \>\>\>\>\> if inter op = (vars from\_asm) to\_vars = []\\ |
|
237 \>\>\>\>\> then transfer fas to\_ctxt\\ |
|
238 \>\>\>\>\> else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\ |
|
239 \> in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\ |
|
240 \\ |
169 fun parse thy str =\\ |
241 fun parse thy str =\\ |
170 \>(let val t = (typ\_a2real o numbers\_to\_string)\\ |
242 \>(let val t = (\alert{typ\_a2real} o numbers\_to\_string)\\ |
171 \>\>\>\>(Syntax.read\_term\_global thy str)\\ |
243 \>\>\>\>(\alert{Syntax.read\_term\_global thy} str)\\ |
172 \>\>in SOME (cterm\_of thy t) end)\\ |
244 \>\>in SOME (cterm\_of thy t) end)\\ |
173 \>\>\>handle \_ => NONE; |
245 \>\>\>handle \_ => NONE;\\ |
174 \\~\\~\\ |
246 \\ |
175 fun parseNEW ctxt str = SOME (Syntax.read\_term ctxt str |> numbers\_to\_string)\\ |
247 fun parseNEW ctxt str = \\ |
|
248 \>\>\>SOME (\alert{Syntax.read\_term ctxt} str |> numbers\_to\_string)\\ |
176 \>\>\>handle \_ => NONE; |
249 \>\>\>handle \_ => NONE; |
177 \end{tabbing} |
250 \end{tabbing} |
178 }} |
251 }} |
179 \end{frame} |
252 |
180 |
253 |
181 |
254 \end{frame} |
182 \begin{frame} |
255 |
183 \frametitle{Code Snippets: context data} |
256 \subsection[Redesign]{Redesign of \isac{} using contexts} |
184 \texttt{\tiny{ |
257 \begin{frame} |
185 \begin{tabbing} |
258 \frametitle{Redesign of \isac{} using contexts} |
186 xx\=xx\=xx\=xx\=\kill |
259 \begin{center} DEMO \end{center} |
187 datatype Isac\_Ctxt =\\ |
260 \end{frame} |
188 \>\>Env of term * term\\ |
261 |
189 \>| Asm of term;\\ |
262 \begin{frame} |
190 \\ |
263 \frametitle{Deduction simplifies computation} |
191 structure ContextData = Proof\_Data\\ |
|
192 \>~(type T = Isac\_Ctxt list\\ |
|
193 \>\>fun init \_ = []);\\ |
|
194 \\ |
|
195 local\\ |
|
196 \>fun insert\_ctxt data = ContextData.map (fn xs => distinct (data@xs));\\ |
|
197 in\\ |
|
198 \>fun insert\_assumptions asms = map (fn t => Asm t) asms |> insert\_ctxt;\\ |
|
199 \>fun insert\_environments envs = map (fn t => Env t) envs |> insert\_ctxt;\\ |
|
200 end\\ |
|
201 \\ |
|
202 local\\ |
|
203 \>fun unpack\_asms (Asm t::ts) = t::(unpack\_asms ts)\\ |
|
204 \>\>| unpack\_asms (Env \_::ts) = unpack\_asms ts\\ |
|
205 \>\>| unpack\_asms [] = [];\\ |
|
206 \>fun unpack\_envs (Env t::ts) = t::(unpack\_envs ts)\\ |
|
207 \>\>| unpack\_envs (Asm \_::ts) = unpack\_envs ts\\ |
|
208 \>\>| unpack\_envs [] = [];\\ |
|
209 in\\ |
|
210 \>fun get\_assumptions ctxt = ContextData.get ctxt |> unpack\_asms;\\ |
|
211 \>fun get\_environments ctxt = ContextData.get ctxt |> unpack\_envs;\\ |
|
212 end |
|
213 \end{tabbing} |
|
214 }} |
|
215 \end{frame} |
|
216 |
|
217 \subsection[Redesign]{Redesign of Type Inference in \isac} |
|
218 \begin{frame} |
|
219 \frametitle{Redesign of Type Inference in \isac} |
|
220 \begin{itemize} |
|
221 \item use context type inference |
|
222 \item parsing input (specification \& user input) |
|
223 \item specification with polymorphic types |
|
224 \item etc. |
|
225 \end{itemize} |
|
226 \end{frame} |
|
227 |
|
228 \begin{frame} |
|
229 \frametitle{Lines of Code} |
|
230 \begin{tabular}{lr} |
|
231 src/ & 1700 k \\ |
|
232 src/Pure/ & 70 k \\ |
|
233 src/Provers/ & 8 k \\ |
|
234 src/Tools/ & 800 k \\ |
|
235 src/Tools/isac/ & 37 k \\ |
|
236 src/Tools/isac/Knowledge & 16 k \\ |
|
237 \end{tabular} |
|
238 \end{frame} |
|
239 |
|
240 \subsection[Code Improvement]{Improvement of functional code} |
|
241 \begin{frame} |
|
242 \frametitle{Improvement of functional code} |
|
243 \begin{itemize} |
|
244 \item combinators |
|
245 \item code conventions |
|
246 \end{itemize} |
|
247 \end{frame} |
|
248 |
|
249 \begin{frame} |
|
250 \frametitle{Combinators \& Code Conventions} |
|
251 \texttt{\tiny{ |
|
252 \begin{tabbing} |
|
253 xx\=xx\=xx\=xx\=xx\=\kill |
|
254 fun prep\_ori [] \_ \_ = ([], e\_ctxt)\\ |
|
255 \>| prep\_ori fmz thy pbt =\\ |
|
256 \>\>\>let\\ |
|
257 \>\>\>\>val ctxt = ProofContext.init\_global thy |> fold declare\_constraints fmz\\ |
|
258 \>\>\>\>val ori = map (add\_field thy pbt o split\_dts o the o parseNEW ctxt) fmz\\ |
|
259 \>\>\>\>\>|> add\_variants\\ |
|
260 \>\>\>\>val maxv = map fst ori |> max\\ |
|
261 \>\>\>\>val maxv = if maxv = 0 then 1 else maxv\\ |
|
262 \>\>\>\>val oris = coll\_variants ori\\ |
|
263 \>\>\>\>\>|> map (replace\_0 maxv |> apfst)\\ |
|
264 \>\>\>\>\>|> add\_id\\ |
|
265 \>\>\>\>\>|> map flattup\\ |
|
266 \>\>\>in (oris, ctxt) end; |
|
267 \end{tabbing} |
|
268 }} |
|
269 \end{frame} |
|
270 |
|
271 \begin{frame} |
|
272 \frametitle{Drop \tt{Check\_Elementwise}!} |
|
273 |
|
274 \small{ |
264 \small{ |
275 %\begin{onehalfspace} |
265 %\begin{onehalfspace} |
276 \begin{tabbing} |
266 \begin{tabbing} |
277 xxx\=xxx\=\kill |
267 xxx\=xxx\=\kill |
278 $\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\ \\ |
268 \`$\mathit{(some)}\;\mathit{assumptions}$\\ |
279 \>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\ |
269 $\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\ |
280 \>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\ |
270 % \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\ |
281 %\>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ \\ |
271 %\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\ |
|
272 %\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\ |
|
273 \>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ |
|
274 \`$x\not=3\land x\not=0$\\ |
282 \>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\ |
275 \>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\ |
283 \>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\ |
276 \>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\ |
284 \>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\ |
277 %\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\ |
285 %\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\ |
278 %\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\ |
286 \>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\ |
279 \>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\ |
287 \>\>$-6 * x + 5 * x ^ 2 = 0$ \\ |
280 \>\>$-6 * x + 5 * x ^ 2 = 0$ \\ |
288 \>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\ |
281 \>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\ |
289 \>\>$[x = 0, x = \frac{6}{5}]$ \\ |
282 \>\>$[x = 0, x = \frac{6}{5}]$ \\ |
290 \>$[x = 0, x = \frac{6}{5}]$ \\ |
283 \`$x = 0\land x = \frac{6}{5}$\\ |
291 \`\alert{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}$}\\ |
284 \>$[\alert{x = 0}, x = \frac{6}{5}]$ \\ |
|
285 \`\alert{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\ |
292 \>$[x = \frac{6}{5}]$ \\ |
286 \>$[x = \frac{6}{5}]$ \\ |
293 $[x = \frac{6}{5}]$ |
287 $[x = \frac{6}{5}]$ |
294 \end{tabbing} |
288 \end{tabbing} |
295 } |
289 } |
296 %\end{onehalfspace} |
290 %\end{onehalfspace} |
297 |
291 \end{frame} |
298 \end{frame} |
292 |
299 |
293 \begin{frame} |
300 \subsection[Future Development]{Preparation of Future Development} |
294 \frametitle{More ``deduction'', \\less ``computation''} |
301 \begin{frame} |
295 \footnotesize{\tt |
302 \frametitle{Preparation of Future Development} |
296 \begin{tabbing} |
303 \begin{itemize} |
297 xx\=xx\=xx\=xx\=xx\=xx\=\kill |
304 \item logical data for Isabelle provers in contexts |
298 Script Solve\_root\_equation (e\_e::bool) (v\_v::real) = \\ |
305 \item \isac{} programming language more compact\\ |
299 \> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@ \\ |
306 $\rightarrow$ context built automatically |
300 \>\>\> (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\ |
307 \end{itemize} |
301 \>\> (L\_L::bool list) = \\ |
308 \end{frame} |
302 \>\>\> (SubProblem (Test', \\ |
309 |
303 \>\>\>\> [linear,univariate,equation,test]\\ |
310 \begin{frame} |
304 \>\>\>\> [Test,solve\_linear]) \\ |
311 \frametitle{jedit demonstration} |
305 \>\>\>\> [BOOL e\_e, REAL v\_v]) \\ |
312 DEMO |
306 \> in \alert{Check\_elementwise L\_L \{(v\_v::real). Assumptions\}})\\ |
313 \end{frame} |
307 \end{tabbing} |
|
308 } |
|
309 \small{ |
|
310 ``Deductive'' part of Lucas-Interpretation relives the ``computational'' part: \alert{one statement becomes obsolete~!} |
|
311 } |
|
312 \end{frame} |
|
313 |
|
314 |
|
315 \begin{frame} |
|
316 \frametitle{Redesign of \isac{} using contexts} |
|
317 Advantages of the redesign: |
|
318 \begin{itemize} |
|
319 \item type inference by \textit{local} contexts\\ |
|
320 \pause |
|
321 \alert{now user-input without type constraints~!} |
|
322 \pause |
|
323 \item consistent handling of logical data |
|
324 \begin{itemize} |
|
325 \item preconditions and partiality conditions in contexts |
|
326 \item transfer of context data into subprograms clarified |
|
327 \item transfer of context data from subprograms clarified |
|
328 \end{itemize} |
|
329 \pause |
|
330 \alert{now some statements become obsolete.}\\ |
|
331 \end{itemize} |
|
332 \pause |
|
333 Now Lucas-interpretation shifts efforts from ``computation'' further to ``deduction''. |
|
334 \end{frame} |
|
335 |
|
336 |
|
337 |
|
338 \subsection[Code Improvement]{Improvement of functional code} |
|
339 \begin{frame} |
|
340 \frametitle{Improvement of functional code} |
|
341 \begin{itemize} |
|
342 \item \textbf{code conventions}: Isabelle2011 published coding standards first time |
|
343 \item \textbf{combinators}: Isabelle2011 introduced a library containing the following combinators: |
|
344 \\\vspace{0.2cm} |
|
345 \tiny{\tt% |
|
346 val |$>$ : 'a * ('a -$>$ 'b) -$>$ 'b\\ |
|
347 val |-$>$ : ('c * 'a) * ('c -$>$ 'a -$>$ 'b) -$>$ 'b\\ |
|
348 val |$>>$ : ('a * 'c) * ('a -$>$ 'b) -$>$ 'b * 'c\\ |
|
349 val ||$>$ : ('c * 'a) * ('a -$>$ 'b) -$>$ 'c * 'b\\ |
|
350 val ||$>>$ : ('c * 'a) * ('a -$>$ 'd * 'b) -$>$ ('c * 'd) * 'b\\ |
|
351 val \#$>$ : ('a -$>$ 'b) * ('b -$>$ 'c) -$>$ 'a -$>$ 'c\\ |
|
352 val \#-$>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'b -$>$ 'd) -$>$ 'a -$>$ 'd\\ |
|
353 val \#$>>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'd) -$>$ 'a -$>$ 'd * 'b\\ |
|
354 val \#\#$>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'd) -$>$ 'a -$>$ 'c * 'd\\ |
|
355 val \#\#$>>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'e * 'd) -$>$ 'a -$>$ ('c * 'e) * 'd\\ |
|
356 } |
|
357 \end{itemize} |
|
358 \end{frame} |
|
359 |
|
360 \begin{frame} |
|
361 \frametitle{Example with combinators} |
|
362 \texttt{\footnotesize{ |
|
363 \begin{tabbing} |
|
364 xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill |
|
365 fun prep\_ori [] \_ \_ = ([], e\_ctxt)\\ |
|
366 \>| prep\_ori fmz thy pbt =\\ |
|
367 \>\>\>let\\ |
|
368 \>\>\>\>val ctxt = ProofContext.init\_global thy \\ |
|
369 \>\>\>\>\> |> fold declare\_constraints fmz\\ |
|
370 \>\>\>\>val ori = \\ |
|
371 \>\>\>\>\> map (add\_field thy pbt o split\_dts o the o parseNEW ctxt) fmz\\ |
|
372 \>\>\>\>\>\> |> add\_variants\\ |
|
373 \>\>\>\>val maxv = map fst ori |> max\\ |
|
374 \>\>\>\>val maxv = if maxv = 0 then 1 else maxv\\ |
|
375 \>\>\>\>val oris = coll\_variants ori\\ |
|
376 \>\>\>\>\> |> map (replace\_0 maxv |> apfst)\\ |
|
377 \>\>\>\>\> |> add\_id\\ |
|
378 \>\>\>\>\> |> map flattup\\ |
|
379 \>\>\>in (oris, ctxt) end; |
|
380 \end{tabbing} |
|
381 }} |
|
382 \dots which probably can be further polished. |
|
383 \end{frame} |
|
384 |
|
385 %\subsection[Future Development]{Preparation of Future Development} |
|
386 %\begin{frame} |
|
387 % \frametitle{Preparation of Future Development} |
|
388 % |
|
389 %% "Script Solve_root_equation (e_e::bool) (v_v::real) = " ^ |
|
390 %% " (let e_e = ((Try (Rewrite_Set norm_equation False)) @@ " ^ |
|
391 %% " (Try (Rewrite_Set Test_simplify False))) e_e; " ^ |
|
392 %% " (L_L::bool list) = " ^ |
|
393 %% " (SubProblem (Test', " ^ |
|
394 %% " [linear,univariate,equation,test]," ^ |
|
395 %% " [Test,solve_linear]) " ^ |
|
396 %% " [BOOL e_e, REAL v_v]) " ^ |
|
397 %% " in Check_elementwise L_L {(v_v::real). Assumptions}) " |
|
398 %\end{frame} |
|
399 % |
|
400 %\begin{frame} |
|
401 % \frametitle{Preparation of Future Development} |
|
402 % \begin{itemize} |
|
403 % \item logical data for Isabelle provers in contexts |
|
404 % \item \isac{} programming language more compact\\ |
|
405 % $\rightarrow$ context built automatically |
|
406 % \end{itemize} |
|
407 %\end{frame} |
|
408 |
314 |
409 |
315 \section[Problems]{Problems encountered in the project} |
410 \section[Problems]{Problems encountered in the project} |
316 \begin{frame} |
411 \begin{frame} |
317 \frametitle{Problems encountered in the project} |
412 \frametitle{Problems encountered in the project} |
318 \begin{itemize} |
413 \begin{itemize} |
319 \item publication of new Isabelle release |
414 \item new Isabelle release in February 2011: update \sisac{} first |
320 \item amount of code in Isabelle and \isac |
415 \pause |
|
416 \item lines of code (LOC) in Isabelle and \sisac{}\\ \vspace{0.2cm} |
|
417 \textit{ |
|
418 \begin{tabular}{lrl} |
|
419 src/ & 1700 & $\,$k LOC\\ |
|
420 src/Pure/ & 70 & k LOC\\ |
|
421 src/Provers/ & 8 & k LOC\\ |
|
422 src/Tools/ & 800 & k LOC\\ |
|
423 src/Tools/isac/ & 37 & k LOC\\ |
|
424 src/Tools/isac/Knowledge & 16 & k LOC |
|
425 \end{tabular} |
|
426 } |
|
427 \pause |
321 \item changes scattered throughout the code ($\rightarrow$ grep) |
428 \item changes scattered throughout the code ($\rightarrow$ grep) |
|
429 \pause |
|
430 \item documentation of Isabelle very ``technical'' (no API) |
|
431 \pause |
|
432 \item documentation of \sisac{} not up to date |
322 \end{itemize} |
433 \end{itemize} |
323 \end{frame} |
434 \end{frame} |
324 |
435 |
|
436 %\begin{frame} |
|
437 % \frametitle{Lines of Code} |
|
438 % \begin{tabular}{lr} |
|
439 % src/ & 1700 k \\ |
|
440 % src/Pure/ & 70 k \\ |
|
441 % src/Provers/ & 8 k \\ |
|
442 % src/Tools/ & 800 k \\ |
|
443 % src/Tools/isac/ & 37 k \\ |
|
444 % src/Tools/isac/Knowledge & 16 k \\ |
|
445 % \end{tabular} |
|
446 %\end{frame} |
|
447 |
325 \section{Summary} |
448 \section{Summary} |
326 \begin{frame} |
449 \begin{frame} |
327 \frametitle{Summary} |
450 \frametitle{Summary} |
328 TODO |
451 The project succeeded in all goals: |
|
452 \begin{itemize} |
|
453 \item implemented Isabelle's contexts in \sisac{} such that |
|
454 \item user input requires no type constraints anymore |
|
455 \item consistent logical data is prepared for Isabelle's provers |
|
456 \end{itemize} |
|
457 \pause |
|
458 The course of the project was close to the plan: |
|
459 \begin{itemize} |
|
460 \item faster in writing new code |
|
461 \item slower in integrating the code into \sisac |
|
462 \end{itemize} |
|
463 \pause |
|
464 The project provided essential prerequisites for further development of the Lucas-interpreter. |
329 \end{frame} |
465 \end{frame} |
330 |
466 |
331 \end{document} |
467 \end{document} |
332 |
468 |
333 |
469 |