# HG changeset patch # User Cezary Kaliszyk # Date 1256567537 -3600 # Node ID 72165b83b9d62baa89c256ca708a1c972abb8f09 # Parent 03c03e88efa956bee4ab163ef1bbe6da36573e23# Parent b888119a18ffb9012bda133435d668671a9d9039 Merge diff -r 03c03e88efa9 -r 72165b83b9d6 IntEx.thy --- a/IntEx.thy Mon Oct 26 15:31:53 2009 +0100 +++ b/IntEx.thy Mon Oct 26 15:32:17 2009 +0100 @@ -23,6 +23,13 @@ term ZERO thm ZERO_def +(* +quotient_def (with my_int) + ZERO :: "my_int" +where + "ZERO \ (0::nat, 0::nat)" +*) + local_setup {* make_const_def @{binding ONE} @{term "(1::nat, 0::nat)"} NoSyn @{typ "nat \ nat"} @{typ "my_int"} #> snd *} diff -r 03c03e88efa9 -r 72165b83b9d6 QuotMain.thy --- a/QuotMain.thy Mon Oct 26 15:31:53 2009 +0100 +++ b/QuotMain.thy Mon Oct 26 15:32:17 2009 +0100 @@ -144,8 +144,6 @@ section {* type definition for the quotient type *} -ML {* Toplevel.theory *} - use "quotient.ML" declare [[map list = (map, LIST_REL)]] @@ -157,6 +155,25 @@ ML {* maps_lookup @{theory} "fun" *} ML {* +val quot_def_parser = + (OuterParse.$$$ "(" |-- OuterParse.$$$ "with" |-- + ((OuterParse.list1 OuterParse.binding) --| OuterParse.$$$ ")")) -- + (OuterParse.binding -- + Scan.option (OuterParse.$$$ "::" |-- OuterParse.typ) -- + OuterParse.mixfix --| OuterParse.where_ -- SpecParse.spec) +*} + +ML {* +fun test (qrtys, (((bind, typstr), mx), (attr, prop))) lthy = lthy +*} + +ML {* +val _ = OuterSyntax.local_theory "quotient_def" "lifted definition" + OuterKeyword.thy_decl (quot_def_parser >> test) +*} + +(* FIXME: auxiliary function *) +ML {* val no_vars = Thm.rule_attribute (fn context => fn th => let val ctxt = Variable.set_body false (Context.proof_of context);