e0726734@42027: % $Header: /cvsroot/latex-beamer/latex-beamer/solutions/conference-talks/conference-ornate-20min.en.tex,v 1.7 2007/01/28 20:48:23 tantau Exp $ e0726734@42027: e0726734@42027: \documentclass{beamer} e0726734@42027: e0726734@42027: % This file is a solution template for: e0726734@42027: e0726734@42027: % - Talk at a conference/colloquium. e0726734@42027: % - Talk length is about 20min. e0726734@42027: % - Style is ornate. e0726734@42027: e0726734@42027: e0726734@42027: e0726734@42027: % Copyright 2004 by Till Tantau . e0726734@42027: % e0726734@42027: % In principle, this file can be redistributed and/or modified under e0726734@42027: % the terms of the GNU Public License, version 2. e0726734@42027: % e0726734@42027: % However, this file is supposed to be a template to be modified e0726734@42027: % for your own needs. For this reason, if you use this file as a e0726734@42027: % template and not specifically distribute it as part of a another e0726734@42027: % package/program, I grant the extra permission to freely copy and e0726734@42027: % modify this file as you see fit and even to delete this copyright e0726734@42027: % notice. e0726734@42027: e0726734@42027: e0726734@42027: \mode e0726734@42027: { e0726734@42027: \usetheme{Hannover} e0726734@42027: % or ... e0726734@42027: e0726734@42027: \setbeamercovered{transparent} e0726734@42027: % or whatever (possibly just delete it) e0726734@42027: } e0726734@42027: neuper@42029: %\usepackage{setspace} %for "\begin{onehalfspace}" e0726734@42027: \usepackage[english]{babel} e0726734@42027: % or whatever e0726734@42027: e0726734@42027: \usepackage[utf8]{inputenc} e0726734@42027: % or whatever e0726734@42027: e0726734@42027: \usepackage{times} e0726734@42027: \usepackage[T1]{fontenc} e0726734@42027: % Or whatever. Note that the encoding and the font should match. If T1 e0726734@42027: % does not look nice, try deleting the line with the fontenc. e0726734@42027: e0726734@42027: \def\isac{${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$} e0726734@42027: \def\sisac{{\footnotesize${\cal I}\mkern-2mu{\cal S}\mkern-5mu{\cal AC}$}} e0726734@42027: e0726734@42027: \title[\isac: Computation \& Deduction] % (optional, use only with long paper titles) e0726734@42027: {Integrating Computation and Deduction\\ e0726734@42027: in the \isac-System} e0726734@42027: e0726734@42027: \subtitle{Projektpraktikum: Introducing Isabelle's Contexts} e0726734@42027: e0726734@42030: \author[Lehnfeld] % (optional, use only with lots of authors) e0726734@42030: {Mathias~Lehnfeld} e0726734@42027: % - Give the names in the same order as the appear in the paper. e0726734@42027: % - Use the \inst{?} command only if the authors have different e0726734@42027: % affiliation. e0726734@42027: e0726734@42027: \institute % (optional, but mostly needed) e0726734@42027: { e0726734@42030: Vienna University of Technology\\ e0726734@42030: Institute of Computer Languages e0726734@42027: } e0726734@42027: % - Use the \inst command only if there are several affiliations. e0726734@42027: % - Keep it simple, no one is interested in your street address. e0726734@42027: e0726734@42027: % \date[CFP 2003] % (optional, should be abbreviation of conference name) e0726734@42027: % {Conference on Fabulous Presentations, 2003} e0726734@42027: % - Either use conference name or its abbreviation. e0726734@42027: % - Not really informative to the audience, more for people (including e0726734@42027: % yourself) who are reading the slides online e0726734@42027: e0726734@42027: % \subject{Theoretical Computer Science} e0726734@42027: % This is only inserted into the PDF information catalog. Can be left e0726734@42027: % out. e0726734@42027: e0726734@42027: e0726734@42027: e0726734@42027: % If you have a file called "university-logo-filename.xxx", where xxx e0726734@42027: % is a graphic format that can be processed by latex or pdflatex, e0726734@42027: % resp., then you can add a logo as follows: e0726734@42027: e0726734@42027: % \pgfdeclareimage[height=0.5cm]{university-logo}{university-logo-filename} e0726734@42027: % \logo{\pgfuseimage{university-logo}} e0726734@42027: e0726734@42027: e0726734@42027: e0726734@42027: % Delete this, if you do not want the table of contents to pop up at e0726734@42027: % the beginning of each subsection: e0726734@42027: \AtBeginSubsection[] e0726734@42027: { e0726734@42027: \begin{frame}{Outline} e0726734@42027: \tableofcontents[currentsection,currentsubsection] e0726734@42027: \end{frame} e0726734@42027: } e0726734@42027: e0726734@42027: e0726734@42027: % If you wish to uncover everything in a step-wise fashion, uncomment e0726734@42027: % the following command: e0726734@42027: e0726734@42027: %\beamerdefaultoverlayspecification{<+->} e0726734@42027: e0726734@42027: e0726734@42027: \begin{document} e0726734@42027: e0726734@42027: \begin{frame} e0726734@42027: \titlepage e0726734@42027: \end{frame} e0726734@42027: e0726734@42027: \begin{frame}{Outline} e0726734@42027: \tableofcontents e0726734@42027: % You might wish to add the option [pausesections] e0726734@42027: \end{frame} e0726734@42027: e0726734@42027: e0726734@42027: % Structuring a talk is a difficult task and the following structure e0726734@42027: % may not be suitable. Here are some rules that apply for this e0726734@42027: % solution: e0726734@42027: e0726734@42027: % - Exactly two or three sections (other than the summary). e0726734@42027: % - At *most* three subsections per section. e0726734@42027: % - Talk about 30s to 2min per frame. So there should be between about e0726734@42027: % 15 and 30 frames, all told. e0726734@42027: e0726734@42027: % - A conference audience is likely to know very little of what you e0726734@42027: % are going to talk about. So *simplify*! e0726734@42027: % - In a 20min talk, getting the main ideas across is hard e0726734@42027: % enough. Leave out details, even if it means being less precise than e0726734@42027: % you think necessary. e0726734@42027: % - If you omit details that are vital to the proof/implementation, e0726734@42027: % just say so once. Everybody will be happy with that. e0726734@42027: neuper@42033: \section[Introduction]{Introduction: Isabelle and \isac} neuper@42033: %\subsection[Isabelle \& \isac]{Isabelle and \isac} neuper@42028: \begin{frame} neuper@42028: \frametitle{Isabelle and \isac} neuper@42033: The task of this ``Projektpraktikum'' (6 ECTS) was to neuper@42033: \begin{itemize} neuper@42033: \item study the concept of ``context'' in the theorem prover \textbf{Isabelle} from TU Munich neuper@42033: \item study basic concepts of the math assistant \sisac{} from TU Graz neuper@42033: \pause neuper@42033: \item redesign \sisac{} with respect to contexts neuper@42033: \begin{itemize} neuper@42033: \item use contexts for type inference of user input neuper@42033: \item handle preconditions of specifications neuper@42033: \item clarify the transfer of context data from sub-programs to the calling program neuper@42033: \end{itemize} neuper@42033: \pause neuper@42033: \item introduce contexts to \sisac{} according to the new design neuper@42033: \item use the coding standards of Isabelle2011 for new code. neuper@42033: \end{itemize} e0726734@42027: \end{frame} e0726734@42027: neuper@42033: %\subsection[Computation \& Deduction]{Computation and Deduction in a Lucas-Interpreter} neuper@42028: \begin{frame} e0726734@42030: \frametitle{Computation and Deduction in a Lucas-Interpreter} e0726734@42030: \includegraphics[width=100mm]{overview.pdf} e0726734@42027: \end{frame} e0726734@42027: neuper@42033: \section[Contributions]{Contributions of the project to \isac} neuper@42033: \subsection[Contexts]{Isabelle's Contexts, advantages and use} neuper@42028: \begin{frame} neuper@42033: \frametitle{Advantages of Isabelle's Contexts} neuper@42033: Isabelle's context replaced theories because \dots: neuper@42033: \begin{itemize} neuper@42033: \item theories are static containers of \textit{all} logical data neuper@42033: \item contexts are \textit{dynamic} containers of logical data: neuper@42033: \begin{itemize} neuper@42033: \item functions for storing and retrieving various logical data neuper@42033: \item functions for type inference neuper@42033: \item provide data for Isabelle's automated provers neuper@42033: \end{itemize} neuper@42033: %\item e.g. theories have no direct functions for type inference neuper@42033: %\item replace function \texttt{parseNEW} neuper@42033: %\item assumptions \& environment $\rightarrow$ context neuper@42033: \item allow to conform with scopes for subprograms. neuper@42033: \end{itemize} e0726734@42027: \end{frame} e0726734@42027: neuper@42028: \begin{frame} neuper@42033: \frametitle{Isabelle's context mechanism} neuper@42033: \texttt{\small{ e0726734@42030: \begin{tabbing} neuper@42033: xx\=xx\=in\=\kill neuper@42033: %xx\=xx\=xx\=xx\=\kill neuper@42033: %datatype Isac\_Ctxt =\\ neuper@42033: %\>\>Env of term * term\\ neuper@42033: %\>| Asm of term;\\ neuper@42033: %\\ neuper@42033: structure ContextData = \alert{Proof\_Data}\\ neuper@42033: \>~(\alert{type T} = term list\\ neuper@42033: \>\>\alert{fun init \_} = []);\\ neuper@42033: \\ neuper@42033: %local\\ neuper@42033: %\>fun insert\_ctxt data = ContextData\alert{.map} (fn xs => distinct (data@xs));\\ neuper@42033: %in\\ neuper@42033: %\>fun insert\_assumptions asms = map (fn t => Asm t) asms |> insert\_ctxt;\\ neuper@42033: %\>fun insert\_environments envs = map (fn t => Env t) envs |> insert\_ctxt;\\ neuper@42033: %end\\ neuper@42033: fun insert\_assumptions asms = \\ e0726734@42037: \>\>\>ContextData\alert{.map} (fn xs => distinct (asms@xs));\\ neuper@42033: \\ neuper@42033: %local\\ neuper@42033: %\>fun unpack\_asms (Asm t::ts) = t::(unpack\_asms ts)\\ neuper@42033: %\>\>| unpack\_asms (Env \_::ts) = unpack\_asms ts\\ neuper@42033: %\>\>| unpack\_asms [] = [];\\ neuper@42033: %\>fun unpack\_envs (Env t::ts) = t::(unpack\_envs ts)\\ neuper@42033: %\>\>| unpack\_envs (Asm \_::ts) = unpack\_envs ts\\ neuper@42033: %\>\>| unpack\_envs [] = [];\\ neuper@42033: %in\\ neuper@42033: %\>fun get\_assumptions ctxt = ContextData.get ctxt |> unpack\_asms;\\ neuper@42033: %\>fun get\_environments ctxt = ContextData.get ctxt |> unpack\_envs;\\ neuper@42033: %end neuper@42033: fun get\_assumptions ctxt = ContextData\alert{.get} ctxt;\\ neuper@42033: \\ neuper@42033: \\ neuper@42033: val declare\_constraints : \\ neuper@42033: \>\>\>term -> Proof.context -> Proof.context e0726734@42031: \end{tabbing} e0726734@42031: }} e0726734@42031: \end{frame} e0726734@42031: e0726734@42031: \begin{frame} neuper@42033: \frametitle{Usage of Contexts} neuper@42033: \texttt{\footnotesize{ e0726734@42031: \begin{tabbing} neuper@42033: xx\=xx\=xx\=xx\=xx\=\kill neuper@42033: fun transfer\_asms\_from\_to from\_ctxt to\_ctxt =\\ neuper@42033: \> let\\ neuper@42033: \>\> val to\_vars = get\_assumptions to\_ctxt |> map vars |> flat\\ neuper@42033: \>\> fun transfer [] to\_ctxt = to\_ctxt\\ neuper@42033: \>\>\> | transfer (from\_asm::fas) to\_ctxt =\\ neuper@42033: \>\>\>\>\> if inter op = (vars from\_asm) to\_vars = []\\ neuper@42033: \>\>\>\>\> then transfer fas to\_ctxt\\ neuper@42033: \>\>\>\>\> else transfer fas (insert\_assumptions [from\_asm] to\_ctxt)\\ neuper@42033: \> in transfer (get\_assumptions from\_ctxt) to\_ctxt end\\ e0726734@42031: \\ neuper@42033: fun parse thy str =\\ neuper@42033: \>(let val t = (\alert{typ\_a2real} o numbers\_to\_string)\\ neuper@42033: \>\>\>\>(\alert{Syntax.read\_term\_global thy} str)\\ neuper@42033: \>\>in SOME (cterm\_of thy t) end)\\ neuper@42033: \>\>\>handle \_ => NONE;\\ e0726734@42031: \\ neuper@42033: fun parseNEW ctxt str = \\ neuper@42033: \>\>\>SOME (\alert{Syntax.read\_term ctxt} str |> numbers\_to\_string)\\ neuper@42033: \>\>\>handle \_ => NONE; e0726734@42030: \end{tabbing} e0726734@42030: }} neuper@42033: neuper@42033: e0726734@42027: \end{frame} e0726734@42027: neuper@42033: \subsection[Redesign]{Redesign of \isac{} using contexts} neuper@42028: \begin{frame} neuper@42033: \frametitle{Redesign of \isac{} using contexts} neuper@42033: \begin{center} DEMO \end{center} e0726734@42030: \end{frame} e0726734@42030: e0726734@42031: \begin{frame} neuper@42033: \frametitle{Deduction simplifies computation} neuper@42033: \small{ neuper@42033: %\begin{onehalfspace} neuper@42033: \begin{tabbing} neuper@42033: xxx\=xxx\=\kill neuper@42033: \`$\mathit{(some)}\;\mathit{assumptions}$\\ neuper@42033: $\mathit{solve}\;(\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}, x)$\\ neuper@42033: % \`$x ^ 2 - 6 * x + 9\not=0\land x ^ 2 - 3 * x\not=0$\\ neuper@42033: %\>$\frac{x}{x ^ 2 - 6 * x + 9} - \frac{1}{x ^ 2 - 3 * x} = \frac{1}{x}$ \\ \\ neuper@42033: %\>$\frac{x}{x ^ 2 + -1 * (6 * x) + 9} + \frac{-1 * 1}{x ^ 2 + -1 * (3 * x)} = \frac{1}{x}$ \\ \\ neuper@42033: \>$\frac{3 + -1 * x + x ^ 2}{9 * x + -6 * x ^ 2 + x ^ 3} = \frac{1}{x}$ \\ neuper@42033: \`$x\not=3\land x\not=0$\\ neuper@42033: \>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\ neuper@42033: \>$\mathit{solve}\;((3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3), x)$ \\ neuper@42033: %\>\>$(3 + -1 * x + x ^ 2) * x = 1 * (9 * x + -6 * x ^ 2 + x ^ 3)$ \\ neuper@42033: %\>\>$(3 + -1 * x + x ^ 2) * x - 1 * (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\ neuper@42033: \>\>$(3 + -1 * x + x ^ 2) * x - (9 * x + -6 * x ^ 2 + x ^ 3) = 0$ \\ neuper@42033: \>\>$-6 * x + 5 * x ^ 2 = 0$ \\ neuper@42033: \>\>$\mathit{solve}\;(-6 * x + 5 * x ^ 2 = 0, x)$ \\ neuper@42033: \>\>$[x = 0, x = \frac{6}{5}]$ \\ neuper@42033: \`$x = 0\land x = \frac{6}{5}$\\ neuper@42033: \>$[\alert{x = 0}, x = \frac{6}{5}]$ \\ neuper@42033: \`\alert{$\mathit{Check\_Elementwise}\;\mathit{Assumptions}:x\not=0\land x = 0$}\\ neuper@42033: \>$[x = \frac{6}{5}]$ \\ neuper@42033: $[x = \frac{6}{5}]$ neuper@42033: \end{tabbing} neuper@42033: } neuper@42033: %\end{onehalfspace} e0726734@42031: \end{frame} e0726734@42031: neuper@42033: \begin{frame} neuper@42033: \frametitle{More ``deduction'', \\less ``computation''} neuper@42033: \footnotesize{\tt neuper@42033: \begin{tabbing} neuper@42033: xx\=xx\=xx\=xx\=xx\=xx\=\kill neuper@42033: Script Solve\_root\_equation (e\_e::bool) (v\_v::real) = \\ neuper@42033: \> (let e\_e = ((Try (Rewrite\_Set norm\_equation False)) \@\@ \\ neuper@42033: \>\>\> (Try (Rewrite\_Set Test\_simplify False))) e\_e; \\ neuper@42033: \>\> (L\_L::bool list) = \\ neuper@42033: \>\>\> (SubProblem (Test', \\ neuper@42033: \>\>\>\> [linear,univariate,equation,test]\\ neuper@42033: \>\>\>\> [Test,solve\_linear]) \\ neuper@42033: \>\>\>\> [BOOL e\_e, REAL v\_v]) \\ neuper@42033: \> in \alert{Check\_elementwise L\_L \{(v\_v::real). Assumptions\}})\\ neuper@42033: \end{tabbing} neuper@42033: } neuper@42033: \small{ neuper@42033: ``Deductive'' part of Lucas-Interpretation relives the ``computational'' part: \alert{one statement becomes obsolete~!} neuper@42033: } neuper@42033: \end{frame} neuper@42033: neuper@42033: neuper@42033: \begin{frame} neuper@42033: \frametitle{Redesign of \isac{} using contexts} neuper@42033: Advantages of the redesign: neuper@42033: \begin{itemize} neuper@42033: \item type inference by \textit{local} contexts\\ neuper@42033: \pause neuper@42033: \alert{now user-input without type constraints~!} neuper@42033: \pause neuper@42033: \item consistent handling of logical data neuper@42033: \begin{itemize} neuper@42033: \item preconditions and partiality conditions in contexts neuper@42033: \item transfer of context data into subprograms clarified neuper@42033: \item transfer of context data from subprograms clarified neuper@42033: \end{itemize} neuper@42033: \pause neuper@42033: \alert{now some statements become obsolete.}\\ neuper@42033: \end{itemize} neuper@42033: \pause neuper@42033: Now Lucas-interpretation shifts efforts from ``computation'' further to ``deduction''. neuper@42033: \end{frame} neuper@42033: neuper@42033: neuper@42033: e0726734@42030: \subsection[Code Improvement]{Improvement of functional code} e0726734@42030: \begin{frame} e0726734@42030: \frametitle{Improvement of functional code} e0726734@42030: \begin{itemize} neuper@42033: \item \textbf{code conventions}: Isabelle2011 published coding standards first time neuper@42033: \item \textbf{combinators}: Isabelle2011 introduced a library containing the following combinators: neuper@42033: \\\vspace{0.2cm} neuper@42033: \tiny{\tt% neuper@42033: val |$>$ : 'a * ('a -$>$ 'b) -$>$ 'b\\ neuper@42033: val |-$>$ : ('c * 'a) * ('c -$>$ 'a -$>$ 'b) -$>$ 'b\\ neuper@42033: val |$>>$ : ('a * 'c) * ('a -$>$ 'b) -$>$ 'b * 'c\\ neuper@42033: val ||$>$ : ('c * 'a) * ('a -$>$ 'b) -$>$ 'c * 'b\\ neuper@42033: val ||$>>$ : ('c * 'a) * ('a -$>$ 'd * 'b) -$>$ ('c * 'd) * 'b\\ neuper@42033: val \#$>$ : ('a -$>$ 'b) * ('b -$>$ 'c) -$>$ 'a -$>$ 'c\\ neuper@42033: val \#-$>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'b -$>$ 'd) -$>$ 'a -$>$ 'd\\ neuper@42033: val \#$>>$ : ('a -$>$ 'c * 'b) * ('c -$>$ 'd) -$>$ 'a -$>$ 'd * 'b\\ neuper@42033: val \#\#$>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'd) -$>$ 'a -$>$ 'c * 'd\\ neuper@42033: val \#\#$>>$ : ('a -$>$ 'c * 'b) * ('b -$>$ 'e * 'd) -$>$ 'a -$>$ ('c * 'e) * 'd\\ neuper@42033: } e0726734@42030: \end{itemize} e0726734@42030: \end{frame} e0726734@42030: e0726734@42030: \begin{frame} neuper@42033: \frametitle{Example with combinators} neuper@42033: \texttt{\footnotesize{ e0726734@42030: \begin{tabbing} neuper@42033: xx\=xx\=xx\=xx\=xx\=xx\=xx\=xx\=\kill e0726734@42030: fun prep\_ori [] \_ \_ = ([], e\_ctxt)\\ e0726734@42030: \>| prep\_ori fmz thy pbt =\\ e0726734@42030: \>\>\>let\\ neuper@42033: \>\>\>\>val ctxt = ProofContext.init\_global thy \\ neuper@42033: \>\>\>\>\> |> fold declare\_constraints fmz\\ neuper@42033: \>\>\>\>val ori = \\ neuper@42033: \>\>\>\>\> map (add\_field thy pbt o split\_dts o the o parseNEW ctxt) fmz\\ neuper@42033: \>\>\>\>\>\> |> add\_variants\\ e0726734@42030: \>\>\>\>val maxv = map fst ori |> max\\ e0726734@42030: \>\>\>\>val maxv = if maxv = 0 then 1 else maxv\\ e0726734@42030: \>\>\>\>val oris = coll\_variants ori\\ neuper@42033: \>\>\>\>\> |> map (replace\_0 maxv |> apfst)\\ neuper@42033: \>\>\>\>\> |> add\_id\\ neuper@42033: \>\>\>\>\> |> map flattup\\ e0726734@42030: \>\>\>in (oris, ctxt) end; e0726734@42030: \end{tabbing} e0726734@42030: }} neuper@42033: \dots which probably can be further polished. e0726734@42030: \end{frame} e0726734@42030: neuper@42033: %\subsection[Future Development]{Preparation of Future Development} neuper@42033: %\begin{frame} neuper@42033: % \frametitle{Preparation of Future Development} neuper@42033: % neuper@42033: %% "Script Solve_root_equation (e_e::bool) (v_v::real) = " ^ neuper@42033: %% " (let e_e = ((Try (Rewrite_Set norm_equation False)) @@ " ^ neuper@42033: %% " (Try (Rewrite_Set Test_simplify False))) e_e; " ^ neuper@42033: %% " (L_L::bool list) = " ^ neuper@42033: %% " (SubProblem (Test', " ^ neuper@42033: %% " [linear,univariate,equation,test]," ^ neuper@42033: %% " [Test,solve_linear]) " ^ neuper@42033: %% " [BOOL e_e, REAL v_v]) " ^ neuper@42033: %% " in Check_elementwise L_L {(v_v::real). Assumptions}) " neuper@42033: %\end{frame} neuper@42033: % neuper@42033: %\begin{frame} neuper@42033: % \frametitle{Preparation of Future Development} neuper@42033: % \begin{itemize} neuper@42033: % \item logical data for Isabelle provers in contexts neuper@42033: % \item \isac{} programming language more compact\\ neuper@42033: % $\rightarrow$ context built automatically neuper@42033: % \end{itemize} neuper@42033: %\end{frame} neuper@42029: e0726734@42031: neuper@42028: \section[Problems]{Problems encountered in the project} neuper@42028: \begin{frame} e0726734@42030: \frametitle{Problems encountered in the project} e0726734@42030: \begin{itemize} neuper@42033: \item new Isabelle release in February 2011: update \sisac{} first neuper@42033: \pause neuper@42033: \item lines of code (LOC) in Isabelle and \sisac{}\\ \vspace{0.2cm} neuper@42033: \textit{ neuper@42033: \begin{tabular}{lrl} neuper@42033: src/ & 1700 & $\,$k LOC\\ neuper@42033: src/Pure/ & 70 & k LOC\\ neuper@42033: src/Provers/ & 8 & k LOC\\ neuper@42033: src/Tools/ & 800 & k LOC\\ neuper@42033: src/Tools/isac/ & 37 & k LOC\\ neuper@42033: src/Tools/isac/Knowledge & 16 & k LOC neuper@42033: \end{tabular} neuper@42033: } neuper@42033: \pause e0726734@42031: \item changes scattered throughout the code ($\rightarrow$ grep) neuper@42033: \pause neuper@42033: \item documentation of Isabelle very ``technical'' (no API) neuper@42033: \pause neuper@42033: \item documentation of \sisac{} not up to date e0726734@42030: \end{itemize} e0726734@42027: \end{frame} e0726734@42027: neuper@42033: %\begin{frame} neuper@42033: % \frametitle{Lines of Code} neuper@42033: % \begin{tabular}{lr} neuper@42033: % src/ & 1700 k \\ neuper@42033: % src/Pure/ & 70 k \\ neuper@42033: % src/Provers/ & 8 k \\ neuper@42033: % src/Tools/ & 800 k \\ neuper@42033: % src/Tools/isac/ & 37 k \\ neuper@42033: % src/Tools/isac/Knowledge & 16 k \\ neuper@42033: % \end{tabular} neuper@42033: %\end{frame} neuper@42033: neuper@42028: \section{Summary} neuper@42028: \begin{frame} e0726734@42030: \frametitle{Summary} neuper@42033: The project succeeded in all goals: neuper@42033: \begin{itemize} neuper@42033: \item implemented Isabelle's contexts in \sisac{} such that neuper@42033: \item user input requires no type constraints anymore neuper@42033: \item consistent logical data is prepared for Isabelle's provers neuper@42033: \end{itemize} neuper@42033: \pause neuper@42033: The course of the project was close to the plan: neuper@42033: \begin{itemize} neuper@42033: \item faster in writing new code neuper@42033: \item slower in integrating the code into \sisac neuper@42033: \end{itemize} neuper@42033: \pause neuper@42033: The project provided essential prerequisites for further development of the Lucas-interpreter. e0726734@42027: \end{frame} e0726734@42027: e0726734@42027: \end{document} e0726734@42027: e0726734@42027: