src/HOL/Codegenerator_Test/Candidates.thy
author eberlm
Fri, 26 Feb 2016 14:58:07 +0100
changeset 62425 d0936b500bf5
parent 62352 35a9e1cbb5b3
child 63167 0909deb8059b
permissions -rw-r--r--
Tuned Euclidean Ring instance for polynomials
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31378
d1cbf6393964 tuned code generator test theories
haftmann
parents: 30446
diff changeset
     1
d1cbf6393964 tuned code generator test theories
haftmann
parents: 30446
diff changeset
     2
(* Author: Florian Haftmann, TU Muenchen *)
21917
haftmann
parents:
diff changeset
     3
58889
5b7a9633cfa8 modernized header uniformly as section;
wenzelm
parents: 58740
diff changeset
     4
section {* A huge collection of equations to generate code from *}
21917
haftmann
parents:
diff changeset
     5
37695
71e84a203c19 introduced distinct session HOL-Codegenerator_Test
haftmann
parents: 37407
diff changeset
     6
theory Candidates
21917
haftmann
parents:
diff changeset
     7
imports
27421
7e458bd56860 HOL += HOL-Complex
haftmann
parents: 27103
diff changeset
     8
  Complex_Main
51160
599ff65b85e2 systematic conversions between nat and nibble/char;
haftmann
parents: 49077
diff changeset
     9
  "~~/src/HOL/Library/Library"
51161
6ed12ae3b3e1 attempt to re-establish conventions which theories are loaded into the grand unified library theory;
haftmann
parents: 51160
diff changeset
    10
  "~~/src/HOL/Library/Sublist_Order"
62425
d0936b500bf5 Tuned Euclidean Ring instance for polynomials
eberlm
parents: 62352
diff changeset
    11
  "~~/src/HOL/Number_Theory/Euclidean_Algorithm"
61227
19ee25fe9737 include some data structures into code generation
haftmann
parents: 61130
diff changeset
    12
  "~~/src/HOL/Data_Structures/Tree_Map"
19ee25fe9737 include some data structures into code generation
haftmann
parents: 61130
diff changeset
    13
  "~~/src/HOL/Data_Structures/Tree_Set"
51173
3cbb4e95a565 Sieve of Eratosthenes
haftmann
parents: 51161
diff changeset
    14
  "~~/src/HOL/Number_Theory/Eratosthenes"
35303
816e48d60b13 added Dlist
haftmann
parents: 33500
diff changeset
    15
  "~~/src/HOL/ex/Records"
21917
haftmann
parents:
diff changeset
    16
begin
haftmann
parents:
diff changeset
    17
61129
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    18
text \<open>Drop technical stuff from @{theory Quickcheck_Narrowing} which is tailored towards Haskell\<close>
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    19
59484
a130ae7a9398 slightly more standard code setup for String.literal, with explicit special case in predicate compiler
haftmann
parents: 58889
diff changeset
    20
setup \<open>
59842
wenzelm
parents: 59733
diff changeset
    21
fn thy =>
59484
a130ae7a9398 slightly more standard code setup for String.literal, with explicit special case in predicate compiler
haftmann
parents: 58889
diff changeset
    22
let
59842
wenzelm
parents: 59733
diff changeset
    23
  val tycos = Sign.logical_types thy;
wenzelm
parents: 59733
diff changeset
    24
  val consts = map_filter (try (curry (Axclass.param_of_inst thy)
59484
a130ae7a9398 slightly more standard code setup for String.literal, with explicit special case in predicate compiler
haftmann
parents: 58889
diff changeset
    25
    @{const_name "Quickcheck_Narrowing.partial_term_of"})) tycos;
59842
wenzelm
parents: 59733
diff changeset
    26
in fold Code.del_eqns consts thy end
61129
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    27
\<close>
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    28
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    29
text \<open>Simple example for the predicate compiler.\<close>
59484
a130ae7a9398 slightly more standard code setup for String.literal, with explicit special case in predicate compiler
haftmann
parents: 58889
diff changeset
    30
51161
6ed12ae3b3e1 attempt to re-establish conventions which theories are loaded into the grand unified library theory;
haftmann
parents: 51160
diff changeset
    31
inductive sublist :: "'a list \<Rightarrow> 'a list \<Rightarrow> bool"
6ed12ae3b3e1 attempt to re-establish conventions which theories are loaded into the grand unified library theory;
haftmann
parents: 51160
diff changeset
    32
where
6ed12ae3b3e1 attempt to re-establish conventions which theories are loaded into the grand unified library theory;
haftmann
parents: 51160
diff changeset
    33
  empty: "sublist [] xs"
6ed12ae3b3e1 attempt to re-establish conventions which theories are loaded into the grand unified library theory;
haftmann
parents: 51160
diff changeset
    34
| drop: "sublist ys xs \<Longrightarrow> sublist ys (x # xs)"
6ed12ae3b3e1 attempt to re-establish conventions which theories are loaded into the grand unified library theory;
haftmann
parents: 51160
diff changeset
    35
| take: "sublist ys xs \<Longrightarrow> sublist (x # ys) (x # xs)"
33500
22e5725be1f3 added predicate example
haftmann
parents: 33356
diff changeset
    36
22e5725be1f3 added predicate example
haftmann
parents: 33356
diff changeset
    37
code_pred sublist .
22e5725be1f3 added predicate example
haftmann
parents: 33356
diff changeset
    38
61129
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    39
text \<open>Avoid popular infix.\<close>
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    40
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    41
code_reserved SML upto
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    42
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    43
text \<open>Explicit check in @{text OCaml} for correct precedence of let expressions in list expressions\<close>
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    44
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    45
definition funny_list :: "bool list"
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    46
where
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    47
  "funny_list = [let b = True in b, False]"
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    48
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    49
definition funny_list' :: "bool list"
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    50
where
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    51
  "funny_list' = funny_list"
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    52
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    53
lemma [code]:
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    54
  "funny_list' = [True, False]"
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    55
  by (simp add: funny_list_def funny_list'_def)
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    56
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    57
definition check_list :: unit
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    58
where
774752af4a1f parenthesing let-expressions in OCaml similar to case expressions avoids precendence problems due to ambiguous scope;
haftmann
parents: 59842
diff changeset
    59
  "check_list = (if funny_list = funny_list' then () else undefined)"
31378
d1cbf6393964 tuned code generator test theories
haftmann
parents: 30446
diff changeset
    60
61130
8e736ce4c6f4 unconditional parenthesing of (chained) abstractions in Scala, with explicit regression setup
haftmann
parents: 61129
diff changeset
    61
text \<open>Explicit check in @{text Scala} for correct bracketing of abstractions\<close>
8e736ce4c6f4 unconditional parenthesing of (chained) abstractions in Scala, with explicit regression setup
haftmann
parents: 61129
diff changeset
    62
8e736ce4c6f4 unconditional parenthesing of (chained) abstractions in Scala, with explicit regression setup
haftmann
parents: 61129
diff changeset
    63
definition funny_funs :: "(bool \<Rightarrow> bool) list \<Rightarrow> (bool \<Rightarrow> bool) list"
8e736ce4c6f4 unconditional parenthesing of (chained) abstractions in Scala, with explicit regression setup
haftmann
parents: 61129
diff changeset
    64
where
8e736ce4c6f4 unconditional parenthesing of (chained) abstractions in Scala, with explicit regression setup
haftmann
parents: 61129
diff changeset
    65
  "funny_funs fs = (\<lambda>x. x \<or> True) # (\<lambda>x. x \<or> False) # fs"
8e736ce4c6f4 unconditional parenthesing of (chained) abstractions in Scala, with explicit regression setup
haftmann
parents: 61129
diff changeset
    66
21917
haftmann
parents:
diff changeset
    67
end