src/HOL/Tools/Quotient/quotient_info.ML
author wenzelm
Fri, 07 Jan 2011 15:55:27 +0100
changeset 41445 1b31460c2e3a
parent 41444 7f40120cd814
child 41451 892e67be8304
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
37744
3daaf23b9ab4 tuned titles
haftmann
parents: 36960
diff changeset
     1
(*  Title:      HOL/Tools/Quotient/quotient_info.ML
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     2
    Author:     Cezary Kaliszyk and Christian Urban
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     3
35788
f1deaca15ca3 observe standard header format;
wenzelm
parents: 35314
diff changeset
     4
Data slots for the quotient package.
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     5
*)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     6
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     7
signature QUOTIENT_INFO =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
     8
sig
40236
8694a12611f9 handle Type.TYPE_MATCH, not arbitrary exceptions via MATCH_TYPE variable;
wenzelm
parents: 38764
diff changeset
     9
  exception NotFound  (* FIXME complicates signatures unnecessarily *)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    10
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    11
  type maps_info = {mapfun: string, relmap: string}
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    12
  val maps_defined: theory -> string -> bool
41443
6e93dfec9e76 comments;
wenzelm
parents: 40236
diff changeset
    13
  (* FIXME functions called "lookup" must return option, not raise exception! *)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    14
  val maps_lookup: theory -> string -> maps_info     (* raises NotFound *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    15
  val maps_update_thy: string -> maps_info -> theory -> theory
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    16
  val maps_update: string -> maps_info -> Proof.context -> Proof.context
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    17
  val print_mapsinfo: Proof.context -> unit
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    18
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    19
  type quotdata_info = {qtyp: typ, rtyp: typ, equiv_rel: term, equiv_thm: thm}
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    20
  val transform_quotdata: morphism -> quotdata_info -> quotdata_info
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    21
  val quotdata_lookup_raw: theory -> string -> quotdata_info option
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    22
  val quotdata_lookup: theory -> string -> quotdata_info     (* raises NotFound *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    23
  val quotdata_update_thy: string -> quotdata_info -> theory -> theory
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    24
  val quotdata_update_gen: string -> quotdata_info -> Context.generic -> Context.generic
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    25
  val quotdata_dest: Proof.context -> quotdata_info list
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    26
  val print_quotinfo: Proof.context -> unit
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    27
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    28
  type qconsts_info = {qconst: term, rconst: term, def: thm}
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    29
  val transform_qconsts: morphism -> qconsts_info -> qconsts_info
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    30
  val qconsts_lookup: theory -> term -> qconsts_info     (* raises NotFound *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    31
  val qconsts_update_thy: string -> qconsts_info -> theory -> theory
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    32
  val qconsts_update_gen: string -> qconsts_info -> Context.generic -> Context.generic
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    33
  val qconsts_dest: Proof.context -> qconsts_info list
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    34
  val print_qconstinfo: Proof.context -> unit
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    35
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    36
  val equiv_rules_get: Proof.context -> thm list
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    37
  val equiv_rules_add: attribute
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    38
  val rsp_rules_get: Proof.context -> thm list
35314
cbdf785a1eb3 export prs_rules and rsp_rules attributes
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 35278
diff changeset
    39
  val rsp_rules_add: attribute
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    40
  val prs_rules_get: Proof.context -> thm list
35314
cbdf785a1eb3 export prs_rules and rsp_rules attributes
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 35278
diff changeset
    41
  val prs_rules_add: attribute
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    42
  val id_simps_get: Proof.context -> thm list
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    43
  val quotient_rules_get: Proof.context -> thm list
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    44
  val quotient_rules_add: attribute
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    45
end;
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    46
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    47
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    48
structure Quotient_Info: QUOTIENT_INFO =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    49
struct
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    50
41443
6e93dfec9e76 comments;
wenzelm
parents: 40236
diff changeset
    51
exception NotFound  (* FIXME odd OCaml-ism!? *)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    52
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    53
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    54
(** data containers **)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    55
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    56
(* info about map- and rel-functions for a type *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    57
type maps_info = {mapfun: string, relmap: string}
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    58
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    59
structure MapsData = Theory_Data
38759
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
    60
(
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
    61
  type T = maps_info Symtab.table
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
    62
  val empty = Symtab.empty
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
    63
  val extend = I
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
    64
  fun merge data = Symtab.merge (K true) data
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
    65
)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    66
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    67
fun maps_defined thy s =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    68
  Symtab.defined (MapsData.get thy) s
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    69
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    70
fun maps_lookup thy s =
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    71
  (case Symtab.lookup (MapsData.get thy) s of
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    72
    SOME map_fun => map_fun
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    73
  | NONE => raise NotFound)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    74
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    75
fun maps_update_thy k minfo = MapsData.map (Symtab.update (k, minfo))
38756
d07959fabde6 renamed ProofContext.theory(_result) to ProofContext.background_theory(_result) to emphasize that this belongs to the infrastructure and is rarely appropriate in user-space tools;
wenzelm
parents: 37944
diff changeset
    76
fun maps_update k minfo = ProofContext.background_theory (maps_update_thy k minfo)  (* FIXME *)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    77
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    78
fun maps_attribute_aux s minfo = Thm.declaration_attribute
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    79
  (fn _ => Context.mapping (maps_update_thy s minfo) (maps_update s minfo))
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    80
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    81
(* attribute to be used in declare statements *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    82
fun maps_attribute (ctxt, (tystr, (mapstr, relstr))) =
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    83
  let
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    84
    val thy = ProofContext.theory_of ctxt
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    85
    val tyname = Sign.intern_type thy tystr
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    86
    val mapname = Sign.intern_const thy mapstr
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    87
    val relname = Sign.intern_const thy relstr
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    88
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    89
    fun sanity_check s = (Const (s, dummyT) |> Syntax.check_term ctxt; ())
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    90
    val _ = List.app sanity_check [mapname, relname]
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    91
  in
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    92
    maps_attribute_aux tyname {mapfun = mapname, relmap = relname}
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
    93
  end
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    94
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    95
val maps_attr_parser =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
    96
  Args.context -- Scan.lift
36960
01594f816e3a prefer structure Keyword, Parse, Parse_Spec, Outer_Syntax;
wenzelm
parents: 35788
diff changeset
    97
    ((Args.name --| Parse.$$$ "=") --
01594f816e3a prefer structure Keyword, Parse, Parse_Spec, Outer_Syntax;
wenzelm
parents: 35788
diff changeset
    98
      (Parse.$$$ "(" |-- Args.name --| Parse.$$$ "," --
01594f816e3a prefer structure Keyword, Parse, Parse_Spec, Outer_Syntax;
wenzelm
parents: 35788
diff changeset
    99
        Args.name --| Parse.$$$ ")"))
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   100
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   101
val _ = Context.>> (Context.map_theory
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   102
  (Attrib.setup @{binding "map"} (maps_attr_parser >> maps_attribute)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   103
    "declaration of map information"))
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   104
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   105
fun print_mapsinfo ctxt =
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   106
  let
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   107
    fun prt_map (ty_name, {mapfun, relmap}) =
41445
wenzelm
parents: 41444
diff changeset
   108
      Pretty.block (separate (Pretty.brk 2)
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   109
        (map Pretty.str
41445
wenzelm
parents: 41444
diff changeset
   110
         ["type:", ty_name,
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   111
          "map:", mapfun,
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   112
          "relation map:", relmap]))
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   113
  in
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   114
    MapsData.get (ProofContext.theory_of ctxt)
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   115
    |> Symtab.dest
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   116
    |> map (prt_map)
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   117
    |> Pretty.big_list "maps for type constructors:"
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   118
    |> Pretty.writeln
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   119
  end
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   120
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   121
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   122
(* info about quotient types *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   123
type quotdata_info = {qtyp: typ, rtyp: typ, equiv_rel: term, equiv_thm: thm}
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   124
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   125
structure QuotData = Theory_Data
38759
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   126
(
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   127
  type T = quotdata_info Symtab.table
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   128
  val empty = Symtab.empty
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   129
  val extend = I
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   130
  fun merge data = Symtab.merge (K true) data
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   131
)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   132
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   133
fun transform_quotdata phi {qtyp, rtyp, equiv_rel, equiv_thm} =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   134
  {qtyp = Morphism.typ phi qtyp,
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   135
   rtyp = Morphism.typ phi rtyp,
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   136
   equiv_rel = Morphism.term phi equiv_rel,
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   137
   equiv_thm = Morphism.thm phi equiv_thm}
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   138
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   139
fun quotdata_lookup_raw thy str = Symtab.lookup (QuotData.get thy) str
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   140
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   141
fun quotdata_lookup thy str =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   142
  case Symtab.lookup (QuotData.get thy) str of
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   143
    SOME qinfo => qinfo
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   144
  | NONE => raise NotFound
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   145
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   146
fun quotdata_update_thy str qinfo = QuotData.map (Symtab.update (str, qinfo))
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   147
fun quotdata_update_gen str qinfo = Context.mapping (quotdata_update_thy str qinfo) I
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   148
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   149
fun quotdata_dest lthy =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   150
  map snd (Symtab.dest (QuotData.get (ProofContext.theory_of lthy)))
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   151
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   152
fun print_quotinfo ctxt =
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   153
  let
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   154
    fun prt_quot {qtyp, rtyp, equiv_rel, equiv_thm} =
41445
wenzelm
parents: 41444
diff changeset
   155
      Pretty.block (separate (Pretty.brk 2)
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   156
       [Pretty.str "quotient type:",
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   157
        Syntax.pretty_typ ctxt qtyp,
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   158
        Pretty.str "raw type:",
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   159
        Syntax.pretty_typ ctxt rtyp,
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   160
        Pretty.str "relation:",
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   161
        Syntax.pretty_term ctxt equiv_rel,
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   162
        Pretty.str "equiv. thm:",
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   163
        Syntax.pretty_term ctxt (prop_of equiv_thm)])
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   164
  in
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   165
    QuotData.get (ProofContext.theory_of ctxt)
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   166
    |> Symtab.dest
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   167
    |> map (prt_quot o snd)
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   168
    |> Pretty.big_list "quotients:"
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   169
    |> Pretty.writeln
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   170
  end
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   171
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   172
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   173
(* info about quotient constants *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   174
type qconsts_info = {qconst: term, rconst: term, def: thm}
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   175
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   176
fun qconsts_info_eq (x : qconsts_info, y : qconsts_info) = #qconst x = #qconst y
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   177
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   178
(* We need to be able to lookup instances of lifted constants,
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   179
   for example given "nat fset" we need to find "'a fset";
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   180
   but overloaded constants share the same name *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   181
structure QConstsData = Theory_Data
38759
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   182
(
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   183
  type T = qconsts_info list Symtab.table
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   184
  val empty = Symtab.empty
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   185
  val extend = I
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   186
  val merge = Symtab.merge_list qconsts_info_eq
37a9092de102 simplification/standardization of some theory data;
wenzelm
parents: 38756
diff changeset
   187
)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   188
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   189
fun transform_qconsts phi {qconst, rconst, def} =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   190
  {qconst = Morphism.term phi qconst,
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   191
   rconst = Morphism.term phi rconst,
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   192
   def = Morphism.thm phi def}
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   193
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   194
fun qconsts_update_thy name qcinfo = QConstsData.map (Symtab.cons_list (name, qcinfo))
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   195
fun qconsts_update_gen name qcinfo = Context.mapping (qconsts_update_thy name qcinfo) I
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   196
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   197
fun qconsts_dest lthy =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   198
  flat (map snd (Symtab.dest (QConstsData.get (ProofContext.theory_of lthy))))
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   199
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   200
fun qconsts_lookup thy t =
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   201
  let
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   202
    val (name, qty) = dest_Const t
35241
3aea183d05db made SML/NJ happy;
wenzelm
parents: 35222
diff changeset
   203
    fun matches (x: qconsts_info) =
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   204
      let
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   205
        val (name', qty') = dest_Const (#qconst x);
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   206
      in
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   207
        name = name' andalso Sign.typ_instance thy (qty, qty')
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   208
      end
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   209
  in
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   210
    (case Symtab.lookup (QConstsData.get thy) name of
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   211
      NONE => raise NotFound
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   212
    | SOME l =>
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   213
        (case find_first matches l of
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   214
          SOME x => x
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   215
        | NONE => raise NotFound))
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   216
  end
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   217
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   218
fun print_qconstinfo ctxt =
41444
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   219
  let
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   220
    fun prt_qconst {qconst, rconst, def} =
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   221
      Pretty.block (separate (Pretty.brk 1)
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   222
       [Syntax.pretty_term ctxt qconst,
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   223
        Pretty.str ":=",
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   224
        Syntax.pretty_term ctxt rconst,
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   225
        Pretty.str "as",
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   226
        Syntax.pretty_term ctxt (prop_of def)])
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   227
  in
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   228
    QConstsData.get (ProofContext.theory_of ctxt)
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   229
    |> Symtab.dest
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   230
    |> map snd
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   231
    |> flat
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   232
    |> map prt_qconst
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   233
    |> Pretty.big_list "quotient constants:"
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   234
    |> Pretty.writeln
7f40120cd814 more precise parentheses and indentation;
wenzelm
parents: 41443
diff changeset
   235
  end
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   236
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   237
(* equivalence relation theorems *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   238
structure EquivRules = Named_Thms
38764
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   239
(
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   240
  val name = "quot_equiv"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   241
  val description = "equivalence relation theorems"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   242
)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   243
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   244
val equiv_rules_get = EquivRules.get
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   245
val equiv_rules_add = EquivRules.add
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   246
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   247
(* respectfulness theorems *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   248
structure RspRules = Named_Thms
38764
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   249
(
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   250
  val name = "quot_respect"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   251
  val description = "respectfulness theorems"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   252
)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   253
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   254
val rsp_rules_get = RspRules.get
35314
cbdf785a1eb3 export prs_rules and rsp_rules attributes
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 35278
diff changeset
   255
val rsp_rules_add = RspRules.add
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   256
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   257
(* preservation theorems *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   258
structure PrsRules = Named_Thms
38764
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   259
(
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   260
  val name = "quot_preserve"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   261
  val description = "preservation theorems"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   262
)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   263
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   264
val prs_rules_get = PrsRules.get
35314
cbdf785a1eb3 export prs_rules and rsp_rules attributes
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 35278
diff changeset
   265
val prs_rules_add = PrsRules.add
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   266
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   267
(* id simplification theorems *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   268
structure IdSimps = Named_Thms
38764
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   269
(
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   270
  val name = "id_simps"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   271
  val description = "identity simp rules for maps"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   272
)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   273
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   274
val id_simps_get = IdSimps.get
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   275
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   276
(* quotient theorems *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   277
structure QuotientRules = Named_Thms
38764
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   278
(
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   279
  val name = "quot_thm"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   280
  val description = "quotient theorems"
e6a18808873c more uniform descriptions, which end up in the collective output of 'print_attributes' for example;
wenzelm
parents: 38759
diff changeset
   281
)
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   282
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   283
val quotient_rules_get = QuotientRules.get
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   284
val quotient_rules_add = QuotientRules.add
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   285
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   286
(* setup of the theorem lists *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   287
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   288
val _ = Context.>> (Context.map_theory
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   289
  (EquivRules.setup #>
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   290
   RspRules.setup #>
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   291
   PrsRules.setup #>
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   292
   IdSimps.setup #>
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   293
   QuotientRules.setup))
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   294
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   295
(* setup of the printing commands *)
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   296
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   297
fun improper_command (pp_fn, cmd_name, descr_str) =
36960
01594f816e3a prefer structure Keyword, Parse, Parse_Spec, Outer_Syntax;
wenzelm
parents: 35788
diff changeset
   298
  Outer_Syntax.improper_command cmd_name descr_str
01594f816e3a prefer structure Keyword, Parse, Parse_Spec, Outer_Syntax;
wenzelm
parents: 35788
diff changeset
   299
    Keyword.diag (Scan.succeed (Toplevel.keep (pp_fn o Toplevel.context_of)))
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   300
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   301
val _ = map improper_command
37944
4b7afae88c57 observe standard conventions for doc-strings;
wenzelm
parents: 37744
diff changeset
   302
  [(print_mapsinfo, "print_quotmaps", "print out all map functions"),
4b7afae88c57 observe standard conventions for doc-strings;
wenzelm
parents: 37744
diff changeset
   303
   (print_quotinfo, "print_quotients", "print out all quotients"),
4b7afae88c57 observe standard conventions for doc-strings;
wenzelm
parents: 37744
diff changeset
   304
   (print_qconstinfo, "print_quotconsts", "print out all quotient constants")]
35222
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   305
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   306
4f1fba00f66d Initial version of HOL quotient package.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents:
diff changeset
   307
end; (* structure *)