doc-src/Codegen/Thy/examples/tree.ML
author haftmann
Tue, 29 Jun 2010 11:25:03 +0200
changeset 37610 1b09880d9734
parent 30226 2f4684e2ea95
permissions -rw-r--r--
updated generated document
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
23250
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
     1
structure HOL = 
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
     2
struct
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
     3
26513
6f306c8c2c54 explicit class "eq" for operational equality
haftmann
parents: 26318
diff changeset
     4
type 'a eq = {eq : 'a -> 'a -> bool};
6f306c8c2c54 explicit class "eq" for operational equality
haftmann
parents: 26318
diff changeset
     5
fun eq (A_:'a eq) = #eq A_;
23250
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
     6
24193
926dde4d96de updated
haftmann
parents: 23850
diff changeset
     7
type 'a ord = {less_eq : 'a -> 'a -> bool, less : 'a -> 'a -> bool};
926dde4d96de updated
haftmann
parents: 23850
diff changeset
     8
fun less_eq (A_:'a ord) = #less_eq A_;
926dde4d96de updated
haftmann
parents: 23850
diff changeset
     9
fun less (A_:'a ord) = #less A_;
926dde4d96de updated
haftmann
parents: 23850
diff changeset
    10
26513
6f306c8c2c54 explicit class "eq" for operational equality
haftmann
parents: 26318
diff changeset
    11
fun eqop A_ a = eq A_ a;
6f306c8c2c54 explicit class "eq" for operational equality
haftmann
parents: 26318
diff changeset
    12
23250
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
    13
end; (*struct HOL*)
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
    14
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    15
structure Orderings = 
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    16
struct
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    17
28052
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    18
type 'a preorder = {Orderings__ord_preorder : 'a HOL.ord};
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    19
fun ord_preorder (A_:'a preorder) = #Orderings__ord_preorder A_;
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    20
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    21
type 'a order = {Orderings__preorder_order : 'a preorder};
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    22
fun preorder_order (A_:'a order) = #Orderings__preorder_order A_;
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    23
24193
926dde4d96de updated
haftmann
parents: 23850
diff changeset
    24
type 'a linorder = {Orderings__order_linorder : 'a order};
926dde4d96de updated
haftmann
parents: 23850
diff changeset
    25
fun order_linorder (A_:'a linorder) = #Orderings__order_linorder A_;
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    26
23250
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
    27
end; (*struct Orderings*)
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    28
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    29
structure Nat = 
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    30
struct
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    31
24421
acfb2413faa3 updated
haftmann
parents: 24193
diff changeset
    32
datatype nat = Suc of nat | Zero_nat;
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    33
28143
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    34
fun eq_nat (Suc a) Zero_nat = false
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    35
  | eq_nat Zero_nat (Suc a) = false
27190
431f695fc865 updated generated file;
wenzelm
parents: 26513
diff changeset
    36
  | eq_nat (Suc nat) (Suc nat') = eq_nat nat nat'
28143
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    37
  | eq_nat Zero_nat Zero_nat = true;
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    38
26513
6f306c8c2c54 explicit class "eq" for operational equality
haftmann
parents: 26318
diff changeset
    39
val eq_nata = {eq = eq_nat} : nat HOL.eq;
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    40
26318
967323f93c67 updated generated files;
wenzelm
parents: 25731
diff changeset
    41
fun less_nat m (Suc n) = less_eq_nat m n
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    42
  | less_nat n Zero_nat = false
26318
967323f93c67 updated generated files;
wenzelm
parents: 25731
diff changeset
    43
and less_eq_nat (Suc m) n = less_nat m n
967323f93c67 updated generated files;
wenzelm
parents: 25731
diff changeset
    44
  | less_eq_nat Zero_nat n = true;
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    45
24193
926dde4d96de updated
haftmann
parents: 23850
diff changeset
    46
val ord_nat = {less_eq = less_eq_nat, less = less_nat} : nat HOL.ord;
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    47
28052
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    48
val preorder_nat = {Orderings__ord_preorder = ord_nat} :
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    49
  nat Orderings.preorder;
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    50
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    51
val order_nat = {Orderings__preorder_order = preorder_nat} :
4dc09699cf93 updated
haftmann
parents: 27190
diff changeset
    52
  nat Orderings.order;
23250
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
    53
24193
926dde4d96de updated
haftmann
parents: 23850
diff changeset
    54
val linorder_nat = {Orderings__order_linorder = order_nat} :
23250
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
    55
  nat Orderings.linorder;
9886802cbbd6 updated documentation
haftmann
parents: 23132
diff changeset
    56
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    57
end; (*struct Nat*)
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    58
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    59
structure Codegen = 
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    60
struct
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    61
24421
acfb2413faa3 updated
haftmann
parents: 24193
diff changeset
    62
datatype ('a, 'b) searchtree =
acfb2413faa3 updated
haftmann
parents: 24193
diff changeset
    63
  Branch of ('a, 'b) searchtree * 'a * ('a, 'b) searchtree |
acfb2413faa3 updated
haftmann
parents: 24193
diff changeset
    64
  Leaf of 'a * 'b;
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    65
28143
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    66
fun update (A1_, A2_) (it, entry) (Leaf (key, vala)) =
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    67
  (if HOL.eqop A1_ it key then Leaf (key, entry)
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    68
    else (if HOL.less_eq
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    69
               ((Orderings.ord_preorder o Orderings.preorder_order o
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    70
                  Orderings.order_linorder)
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    71
                 A2_)
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    72
               it key
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    73
           then Branch (Leaf (it, entry), it, Leaf (key, vala))
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    74
           else Branch (Leaf (key, vala), it, Leaf (it, entry))))
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    75
  | update (A1_, A2_) (it, entry) (Branch (t1, key, t2)) =
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    76
    (if HOL.less_eq
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    77
          ((Orderings.ord_preorder o Orderings.preorder_order o
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    78
             Orderings.order_linorder)
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    79
            A2_)
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    80
          it key
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    81
      then Branch (update (A1_, A2_) (it, entry) t1, key, t2)
e5c6c4aac52c different bookkeeping for code equations
haftmann
parents: 28052
diff changeset
    82
      else Branch (t1, key, update (A1_, A2_) (it, entry) t2));
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    83
23132
ae52b82dc5d8 updated
haftmann
parents: 23107
diff changeset
    84
val example : (Nat.nat, (Nat.nat list)) searchtree =
26513
6f306c8c2c54 explicit class "eq" for operational equality
haftmann
parents: 26318
diff changeset
    85
  update (Nat.eq_nata, Nat.linorder_nat)
23132
ae52b82dc5d8 updated
haftmann
parents: 23107
diff changeset
    86
    (Nat.Suc (Nat.Suc (Nat.Suc (Nat.Suc Nat.Zero_nat))),
ae52b82dc5d8 updated
haftmann
parents: 23107
diff changeset
    87
      [Nat.Suc (Nat.Suc Nat.Zero_nat), Nat.Suc (Nat.Suc Nat.Zero_nat)])
26513
6f306c8c2c54 explicit class "eq" for operational equality
haftmann
parents: 26318
diff changeset
    88
    (update (Nat.eq_nata, Nat.linorder_nat)
23132
ae52b82dc5d8 updated
haftmann
parents: 23107
diff changeset
    89
      (Nat.Suc (Nat.Suc (Nat.Suc Nat.Zero_nat)),
ae52b82dc5d8 updated
haftmann
parents: 23107
diff changeset
    90
        [Nat.Suc (Nat.Suc (Nat.Suc Nat.Zero_nat))])
26513
6f306c8c2c54 explicit class "eq" for operational equality
haftmann
parents: 26318
diff changeset
    91
      (update (Nat.eq_nata, Nat.linorder_nat)
23132
ae52b82dc5d8 updated
haftmann
parents: 23107
diff changeset
    92
        (Nat.Suc (Nat.Suc Nat.Zero_nat), [Nat.Suc (Nat.Suc Nat.Zero_nat)])
ae52b82dc5d8 updated
haftmann
parents: 23107
diff changeset
    93
        (Leaf (Nat.Suc Nat.Zero_nat, []))));
22490
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    94
1822ec4fcecd added example file
haftmann
parents:
diff changeset
    95
end; (*struct Codegen*)