doc-src/isac/mlehnfeld/presentation.tex
branchdecompose-isar
changeset 42033 9e055a200e03
parent 42032 6e3504221cac
child 42037 ee2c2928150e
equal deleted inserted replaced
42032:6e3504221cac 42033:9e055a200e03
   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