src/HOL/Tools/res_types_sorts.ML
author paulson
Tue, 20 Sep 2005 18:43:39 +0200
changeset 17525 ae5bb6001afb
parent 16803 014090d1e64b
permissions -rw-r--r--
tidying, and support for axclass/classrel clauses
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
     1
(*  Author:     Jia Meng, Cambridge University Computer Laboratory
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     2
    ID:         $Id$
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     3
    Copyright 2004 University of Cambridge
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     4
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
     5
Transformation of Isabelle arities and class relations into clauses
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
     6
(defined in the structure Clause).
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     7
*)
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     8
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
     9
signature RES_TYPES_SORTS =
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    10
sig
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    11
  exception ARITIES of string
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    12
  val arity_clause: string * (string * string list list) list -> ResClause.arityClause list
17525
ae5bb6001afb tidying, and support for axclass/classrel clauses
paulson
parents: 16803
diff changeset
    13
  val arity_clause_thy: theory -> ResClause.arityClause list 
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    14
  type classrelClauses
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    15
  val classrel_clause: string * string list -> ResClause.classrelClause list
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    16
  val classrel_clauses_classrel: Sorts.classes -> ResClause.classrelClause list list
17525
ae5bb6001afb tidying, and support for axclass/classrel clauses
paulson
parents: 16803
diff changeset
    17
  val classrel_clauses_thy: theory -> ResClause.classrelClause list 
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    18
end;
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    19
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    20
structure ResTypesSorts: RES_TYPES_SORTS =
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    21
struct
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    22
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    23
(* Isabelle arities *)
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    24
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    25
exception ARITIES of string;
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    26
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    27
fun arity_clause (tcons, []) = raise ARITIES tcons
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    28
  | arity_clause (tcons, [ar]) = [ResClause.make_axiom_arity_clause (tcons, ar)]
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    29
  | arity_clause (tcons, ar1 :: ars) =
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    30
      ResClause.make_axiom_arity_clause (tcons, ar1) :: arity_clause (tcons, ars);
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    31
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    32
fun multi_arity_clause [] expts = ([], expts)
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    33
  | multi_arity_clause ((tcon, []) :: tcons_ars) expts =
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    34
      multi_arity_clause tcons_ars ((tcon, []) :: expts)
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    35
  | multi_arity_clause (tcon_ar :: tcons_ars) expts =
17525
ae5bb6001afb tidying, and support for axclass/classrel clauses
paulson
parents: 16803
diff changeset
    36
      let val (cls,ary) = multi_arity_clause tcons_ars expts
ae5bb6001afb tidying, and support for axclass/classrel clauses
paulson
parents: 16803
diff changeset
    37
      in ((arity_clause tcon_ar @ cls), ary) end;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    38
16803
wenzelm
parents: 16367
diff changeset
    39
fun arity_clause_thy thy =
wenzelm
parents: 16367
diff changeset
    40
  let val arities = #arities (Type.rep_tsig (Sign.tsig_of thy))
17525
ae5bb6001afb tidying, and support for axclass/classrel clauses
paulson
parents: 16803
diff changeset
    41
  in #1 (multi_arity_clause (Symtab.dest arities) []) end;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    42
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    43
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    44
(* Isabelle classes *)
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    45
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    46
type classrelClauses = ResClause.classrelClause list Symtab.table;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    47
16803
wenzelm
parents: 16367
diff changeset
    48
val classrel_of = #2 o #classes o Type.rep_tsig o Sign.tsig_of;
16367
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    49
val classrel_clause = ResClause.classrelClauses_of;
e11031fe4096 accomodate changed #classes;
wenzelm
parents: 15347
diff changeset
    50
fun classrel_clauses_classrel (C: Sorts.classes) = map classrel_clause (Graph.dest C);
17525
ae5bb6001afb tidying, and support for axclass/classrel clauses
paulson
parents: 16803
diff changeset
    51
val classrel_clauses_thy = List.concat o classrel_clauses_classrel o classrel_of;
15347
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    52
14585bc8fa09 resolution package tools by Jia Meng
paulson
parents:
diff changeset
    53
end;