src/HOLCF/holcf_logic.ML
author hoelzl
Thu, 12 Nov 2009 17:21:43 +0100
changeset 33638 548a34929e98
parent 32155 e2bf2f73b0c8
child 35426 c9b9d4fc270d
permissions -rw-r--r--
Renamed upd_snd_conv to apsnd_conv to be consistent with apfst_conv; Added apsnd_apfst_commute
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4129
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
     1
(*  Title:      HOLCF/holcf_logic.ML
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
     2
    Author:     David von Oheimb
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
     3
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
     4
Abstract syntax operations for HOLCF.
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
     5
*)
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
     6
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
     7
infixr 6 ->>;
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
     8
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
     9
signature HOLCF_LOGIC =
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    10
sig
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    11
  val mk_btyp: string -> typ * typ -> typ
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    12
  val pcpoS: sort
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    13
  val mk_TFree: string -> typ
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    14
  val cfun_arrow: string
16843
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    15
  val ->> : typ * typ -> typ
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    16
  val mk_ssumT: typ * typ -> typ
4129
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    17
  val mk_sprodT: typ * typ -> typ
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    18
  val mk_uT: typ -> typ
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    19
  val trT: typ
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    20
  val oneT: typ
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    21
end;
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    22
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    23
structure HOLCFLogic: HOLCF_LOGIC =
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    24
struct
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    25
16843
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    26
(* sort pcpo *)
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    27
32010
cb1a1c94b4cd more antiquotations;
wenzelm
parents: 16843
diff changeset
    28
val pcpoS = @{sort pcpo};
16843
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    29
fun mk_TFree s = TFree ("'" ^ s, pcpoS);
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    30
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    31
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    32
(* basic types *)
4129
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    33
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    34
fun mk_btyp t (S,T) = Type (t,[S,T]);
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    35
16843
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    36
local
32155
e2bf2f73b0c8 more @{theory} antiquotations;
wenzelm
parents: 32010
diff changeset
    37
  val intern_type = Sign.intern_type @{theory};
16843
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    38
  val u = intern_type "u";
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    39
in
4129
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    40
16843
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    41
val cfun_arrow = intern_type "->";
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    42
val op ->> = mk_btyp cfun_arrow;
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    43
val mk_ssumT = mk_btyp (intern_type "++");
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    44
val mk_sprodT = mk_btyp (intern_type "**");
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    45
fun mk_uT T = Type (u, [T]);
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    46
val trT = Type (intern_type "tr" , []);
8ff9a80f3c93 removed mk_prodT, mk_not (cf. HOL/hologic.ML);
wenzelm
parents: 16364
diff changeset
    47
val oneT = Type (intern_type "one", []);
4129
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    48
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    49
end;
2fd816aa6206 HOLCFLogic.ML, contconsts.ML renamed to holcf_logic.ML, cont_consts.ML;
wenzelm
parents:
diff changeset
    50
12030
wenzelm
parents: 4129
diff changeset
    51
end;