doc-src/TutorialI/Misc/Option2.thy
author chaieb
Wed, 19 May 2004 11:23:59 +0200
changeset 14758 af3b71a46a1c
parent 11428 332347b9b942
child 15905 0a4cc9b113c7
permissions -rw-r--r--
A new implementation for presburger arithmetic following the one suggested in technical report Chaieb Amine and Tobias Nipkow. It is generic an smaller. the tactic has also changed and allows the abstaction over fuction occurences whose type is nat or int.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10561
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
     1
(*<*)
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
     2
theory Option2 = Main:
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
     3
hide const None Some
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
     4
hide type option
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
     5
(*>*)
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
     6
11428
332347b9b942 tidying the index
paulson
parents: 11310
diff changeset
     7
text{*\indexbold{*option (type)}\indexbold{*None (constant)}%
332347b9b942 tidying the index
paulson
parents: 11310
diff changeset
     8
\indexbold{*Some (constant)}
10561
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
     9
Our final datatype is very simple but still eminently useful:
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    10
*}
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    11
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    12
datatype 'a option = None | Some 'a;
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    13
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    14
text{*\noindent
11310
51e70b7bc315 spelling check
paulson
parents: 10561
diff changeset
    15
Frequently one needs to add a distinguished element to some existing type.
10561
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    16
For example, type @{text"t option"} can model the result of a computation that
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    17
may either terminate with an error (represented by @{term None}) or return
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    18
some value @{term v} (represented by @{term"Some v"}).
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    19
Similarly, @{typ nat} extended with $\infty$ can be modeled by type
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    20
@{typ"nat option"}. In both cases one could define a new datatype with
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    21
customized constructors like @{term Error} and @{term Infinity},
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    22
but it is often simpler to use @{text option}. For an application see
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    23
\S\ref{sec:Trie}.
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    24
*}
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    25
(*<*)
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    26
(*
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    27
constdefs
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    28
 infplus :: "nat option \<Rightarrow> nat option \<Rightarrow> nat option"
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    29
"infplus x y \<equiv> case x of None \<Rightarrow> None
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    30
               | Some m \<Rightarrow> (case y of None \<Rightarrow> None | Some n \<Rightarrow> Some(m+n))"
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    31
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    32
*)
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    33
end
d960cc4a6afc *** empty log message ***
nipkow
parents:
diff changeset
    34
(*>*)