# HG changeset patch # User desharna # Date 1633594810 -7200 # Node ID f4a80cfb27819d22ea873481bf1608de649bed5f # Parent 9d304ef5c9320f64533ac8e53f78a230628aa609# Parent 149c8ba1ebb2d7c706e68fab2c7af7eba73e6b69 merged diff -r 9d304ef5c932 -r f4a80cfb2781 Admin/components/bundled-windows --- a/Admin/components/bundled-windows Mon Sep 20 14:24:11 2021 +0200 +++ b/Admin/components/bundled-windows Thu Oct 07 10:20:10 2021 +0200 @@ -1,3 +1,3 @@ #additional components to be bundled for release -cygwin-20201130 +cygwin-20211004 windows_app-20181006 diff -r 9d304ef5c932 -r f4a80cfb2781 Admin/components/components.sha1 --- a/Admin/components/components.sha1 Mon Sep 20 14:24:11 2021 +0200 +++ b/Admin/components/components.sha1 Thu Oct 07 10:20:10 2021 +0200 @@ -68,6 +68,7 @@ 0107343cd2562618629f73b2581168f0045c3234 cygwin-20201002.tar.gz a3d481401b633c0ee6abf1da07d75da94076574c cygwin-20201130.tar.gz 5b1820b87b25d8f2d237515d9854e3ce54ee331b cygwin-20211002.tar.gz +5dff30be394d88dd83ea584fa6f8063bdcdc21fd cygwin-20211004.tar.gz 0fe549949a025d65d52d6deca30554de8fca3b6e e-1.5.tar.gz 2e293256a134eb8e5b1a283361b15eb812fbfbf1 e-1.6-1.tar.gz e1919e72416cbd7ac8de5455caba8901acc7b44d e-1.6-2.tar.gz @@ -81,6 +82,7 @@ 6b962a6b4539b7ca4199977973c61a8c98a492e8 e-2.0.tar.gz 66449a7b68b7d85a7189e10735a81069356123b6 e-2.5-1.tar.gz 813b66ca151d7a39b5cacb39ab52acabc2a54845 e-2.5.tar.gz +6e63f9f354b8c06035952845b987080699a12d55 e-2.6-1.tar.gz a3bebab5df4294dac2dd7fd2065a94df00e0b3ff e-2.6.tar.gz 6d34b18ca0aa1e10bab6413045d079188c0e2dfb exec_process-1.0.1.tar.gz 8b9bffd10e396d965e815418295f2ee2849bea75 exec_process-1.0.2.tar.gz @@ -124,6 +126,7 @@ b166b4bd583b6442a5d75eab06f7adbb66919d6d isabelle_fonts-20210319.tar.gz 9467ad54a9ac10a6e7e8db5458d8d2a5516eba96 isabelle_fonts-20210321.tar.gz 1f7a0b9829ecac6552b21e995ad0f0ac168634f3 isabelle_fonts-20210322.tar.gz +667000ce6dd6ea3c2d11601a41c206060468807d isabelle_fonts-20211004.tar.gz 916adccd2f40c55116b68b92ce1eccb24d4dd9a2 isabelle_setup-20210630.tar.gz c611e363287fcc9bdd93c33bef85fa4e66cd3f37 isabelle_setup-20210701.tar.gz a0e7527448ef0f7ce164a38a50dc26e98de3cad6 isabelle_setup-20210709.tar.gz @@ -273,6 +276,7 @@ 002f74c9e65e650de2638bf54d7b012b8de76c28 opam-2.0.3.tar.gz ddb3b438430d9565adbf5e3d913bd52af8337511 opam-2.0.6.tar.gz fc66802c169f44511d3be30435eb89a11e635742 opam-2.0.7.tar.gz +108e947d17e9aa6170872614492d8f647802f483 opam-2.1.0.tar.gz 1c8cb6a8f4cbeaedce2d6d1ba8fc7e2ab3663aeb polyml-5.4.1.tar.gz a3f9c159a0ee9a63b7a5d0c835ed9c2c908f8b56 polyml-5.5.0-1.tar.gz 7d604a99355efbfc1459d80db3279ffa7ade3e39 polyml-5.5.0-2.tar.gz @@ -409,10 +413,13 @@ e8648878f908e93d64a393231ab21fdac976a9c2 sumatra_pdf-3.3.3.tar.gz 869ea6d8ea35c8ba68d7fcb028f16b2b7064c5fd vampire-1.0.tar.gz 399f687b56575b93e730f68c91c989cb48aa34d8 vampire-4.2.2.tar.gz +0402978ca952f08eea73e483b694928ac402a304 vampire-4.5.1-1.tar.gz 26d9d171e169c6420a08aa99eda03ef5abb9c545 vampire-4.5.1.tar.gz +4571c042efd6fc3097e105a528826959acd888a3 vampire-4.6.tar.gz 98c5c79fef7256db9f64c8feea2edef0a789ce46 verit-2016post.tar.gz 52ba18a6c96b53c5ae9b179d5a805a0c08f1da6d verit-2020.10-rmx-1.tar.gz b6706e74e20e14038e9b38f0acdb5639a134246a verit-2020.10-rmx.tar.gz +d33e1e36139e86b9e9a48d8b46a6f90d7863a51c verit-2021.06-rmx-1.tar.gz c11d1120fcefaec79f099fe2be05b03cd2aed8b9 verit-2021.06-rmx.tar.gz 81d21dfd0ea5c58f375301f5166be9dbf8921a7a windows_app-20130716.tar.gz fe15e1079cf5ad86f3cbab4553722a0d20002d11 windows_app-20130905.tar.gz @@ -445,4 +452,5 @@ aa20745f0b03e606b1a4149598e0c7572b63c657 z3-4.8.3.tar.gz 9dfeb39c87393af7b6a34118507637aa53aca05e zipperposition-2.0-1.tar.gz b884c60653002a7811e3b652ae0515e825d98667 zipperposition-2.0.tar.gz +b129ec4f8a4474953ec107536298ee08a01fbebc zipperposition-2.1-1.tar.gz 5f53a77efb5cbe9d0c95d74a1588cc923bd711a7 zipperposition-2.1.tar.gz diff -r 9d304ef5c932 -r f4a80cfb2781 Admin/components/main --- a/Admin/components/main Mon Sep 20 14:24:11 2021 +0200 +++ b/Admin/components/main Thu Oct 07 10:20:10 2021 +0200 @@ -4,10 +4,10 @@ bib2xhtml-20190409 csdp-6.1.1 cvc4-1.8 -e-2.6 +e-2.6-1 flatlaf-1.6 idea-icons-20210508 -isabelle_fonts-20210322 +isabelle_fonts-20211004 isabelle_setup-20210922 jdk-17+35 jedit-20210802 @@ -24,8 +24,8 @@ sqlite-jdbc-3.36.0.3 ssh-java-20190323 stack-2.7.3 -vampire-4.5.1 -verit-2021.06-rmx +vampire-4.6 +verit-2021.06-rmx-1 xz-java-1.9 z3-4.4.0pre-3 -zipperposition-2.1 +zipperposition-2.1-1 diff -r 9d304ef5c932 -r f4a80cfb2781 Admin/isabelle_fonts/IsabelleSymbols.sfd --- a/Admin/isabelle_fonts/IsabelleSymbols.sfd Mon Sep 20 14:24:11 2021 +0200 +++ b/Admin/isabelle_fonts/IsabelleSymbols.sfd Thu Oct 07 10:20:10 2021 +0200 @@ -20,7 +20,7 @@ OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 1 CreationTime: 1050361371 -ModificationTime: 1616429436 +ModificationTime: 1633346733 PfmFamily: 17 TTFWeight: 400 TTFWidth: 5 @@ -2242,11 +2242,11 @@ DisplaySize: -96 AntiAlias: 1 FitToEm: 1 -WinInfo: 10980 12 6 +WinInfo: 8196 12 6 BeginPrivate: 0 EndPrivate TeXData: 1 0 0 631296 315648 210432 572416 -1048576 210432 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144 -BeginChars: 1114189 1462 +BeginChars: 1114189 1463 StartChar: u10000 Encoding: 65536 65536 0 @@ -63624,5 +63624,44 @@ 1271 1288 1271 1288 1271 1280 c 0,0,1 EndSplineSet EndChar + +StartChar: uni2016 +Encoding: 8214 8214 1462 +Width: 1408 +VWidth: 3930 +Flags: W +VStem: 324.48 188.739<-502.563 1702.56> 912.78 188.739<-500.697 1716.06> +LayerCount: 2 +Fore +SplineSet +324.48046875 1636.74023438 m 2,0,1 + 324.48046875 1676.40625 324.48046875 1676.40625 352.905273438 1703.41015625 c 0,2,3 + 380.89453125 1730 380.89453125 1730 419.959960938 1730 c 0,4,5 + 438.3125 1730 438.3125 1730 454.934570312 1722.7734375 c 128,-1,6 + 471.557617188 1715.546875 471.557617188 1715.546875 485.162109375 1701.94238281 c 128,-1,7 + 498.767578125 1688.3359375 498.767578125 1688.3359375 505.994140625 1671.71582031 c 128,-1,8 + 513.219726562 1655.09667969 513.219726562 1655.09667969 513.219726562 1636.74023438 c 2,9,-1 + 513.219726562 -436.740234375 l 2,10,11 + 513.219726562 -473.883789062 513.219726562 -473.883789062 485.162109375 -501.94140625 c 128,-1,12 + 457.104492188 -530 457.104492188 -530 419.959960938 -530 c 0,13,14 + 380.89453125 -530 380.89453125 -530 352.904296875 -503.41015625 c 0,15,16 + 324.48046875 -476.40625 324.48046875 -476.40625 324.48046875 -436.740234375 c 2,17,-1 + 324.48046875 1636.74023438 l 2,0,1 +1101.51953125 -436.740234375 m 2,18,19 + 1101.51953125 -473.584960938 1101.51953125 -473.584960938 1074.9296875 -501.57421875 c 0,20,21 + 1047.92578125 -530 1047.92578125 -530 1008.25976562 -530 c 0,22,23 + 969.194335938 -530 969.194335938 -530 941.206054688 -503.41015625 c 0,24,25 + 912.780273438 -476.40625 912.780273438 -476.40625 912.780273438 -436.740234375 c 2,26,-1 + 912.780273438 1636.74023438 l 2,27,28 + 912.780273438 1656.08203125 912.780273438 1656.08203125 920.038085938 1673.13964844 c 128,-1,29 + 927.295898438 1690.19628906 927.295898438 1690.19628906 941.205078125 1703.41015625 c 0,30,31 + 969.194335938 1730 969.194335938 1730 1008.25976562 1730 c 0,32,33 + 1027.6015625 1730 1027.6015625 1730 1044.65917969 1722.7421875 c 128,-1,34 + 1061.71582031 1715.484375 1061.71582031 1715.484375 1074.9296875 1701.57421875 c 0,35,36 + 1087.87402344 1687.94921875 1087.87402344 1687.94921875 1094.69628906 1671.43066406 c 128,-1,37 + 1101.51953125 1654.91113281 1101.51953125 1654.91113281 1101.51953125 1636.74023438 c 2,38,-1 + 1101.51953125 -436.740234375 l 2,18,19 +EndSplineSet +EndChar EndChars EndSplineFont diff -r 9d304ef5c932 -r f4a80cfb2781 Admin/isabelle_fonts/IsabelleSymbolsBold.sfd --- a/Admin/isabelle_fonts/IsabelleSymbolsBold.sfd Mon Sep 20 14:24:11 2021 +0200 +++ b/Admin/isabelle_fonts/IsabelleSymbolsBold.sfd Thu Oct 07 10:20:10 2021 +0200 @@ -21,7 +21,7 @@ OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 1 CreationTime: 1050374980 -ModificationTime: 1616429477 +ModificationTime: 1633346753 PfmFamily: 17 TTFWeight: 700 TTFWidth: 5 @@ -1679,10 +1679,10 @@ DisplaySize: -96 AntiAlias: 1 FitToEm: 1 -WinInfo: 10978 11 8 +WinInfo: 8195 11 8 BeginPrivate: 0 EndPrivate -BeginChars: 1114115 1450 +BeginChars: 1114115 1451 StartChar: .notdef Encoding: 1114112 -1 0 @@ -71737,5 +71737,63 @@ 1131.20656165 1403 1131.20656165 1403 1167.81653987 1380.08960467 c 1,0,1 EndSplineSet EndChar + +StartChar: uni2016 +Encoding: 8214 8214 1450 +Width: 1408 +VWidth: 3930 +Flags: W +LayerCount: 2 +Fore +SplineSet +273.48046875 1636.74023438 m 2 + 274.305963608 1698.42980182 274.305963608 1698.42980182 317.779016975 1740.38509515 c 0 + 331.5651659 1753.48196068 331.5651659 1753.48196068 348.024849563 1762.58337143 c 0 + 364.484533226 1771.68478217 364.484533226 1771.68478217 382.684388387 1776.34239109 c 0 + 400.884243548 1781 400.884243548 1781 419.959960938 1781 c 0 + 434.214451746 1781 434.214451746 1781 448.226135404 1778.10483503 c 0 + 462.237819061 1775.20967007 462.237819061 1775.20967007 475.267592525 1769.544884 c 0 + 500.772123393 1758.45726043 500.772123393 1758.45726043 521.225849377 1738.00353445 c 0 + 527.877534153 1731.35137223 527.877534153 1731.35137223 533.617741307 1724.04056682 c 0 + 539.357948462 1716.7297614 539.357948462 1716.7297614 544.207481245 1708.65391055 c 0 + 549.057014029 1700.5780597 549.057014029 1700.5780597 552.764844573 1692.05055051 c 0 + 564.219726562 1665.70385748 564.219726562 1665.70385748 564.219726562 1636.74023438 c 2 + 564.219726562 -436.740234375 l 2 + 564.219726562 -495.008680733 564.219726562 -495.008680733 521.225182787 -538.003224508 c 0 + 507.658300589 -551.57057891 507.658300589 -551.57057891 491.595678193 -561.145395835 c 0 + 475.533055797 -570.720212761 475.533055797 -570.720212761 457.267144636 -575.860106381 c 0 + 439.001233476 -581 439.001233476 -581 419.959960938 -581 c 0 + 391.253451691 -581 391.253451691 -581 364.896337999 -570.553783949 c 0 + 338.539224308 -560.107567898 338.539224308 -560.107567898 317.777206298 -540.384302725 c 0 + 296.387100388 -520.062746736 296.387100388 -520.062746736 284.933784569 -493.217738834 c 0 + 273.48046875 -466.372730933 273.48046875 -466.372730933 273.48046875 -436.740234375 c 2 + 273.48046875 1636.74023438 l 2 +1152.51953125 -436.740234375 m 2 + 1151.74952957 -494.144209416 1151.74952957 -494.144209416 1111.90503919 -536.700040691 c 0 + 1091.58360184 -558.091491525 1091.58360184 -558.091491525 1064.73824301 -569.545745762 c 0 + 1037.89288418 -581 1037.89288418 -581 1008.25976562 -581 c 0 + 979.553949558 -581 979.553949558 -581 953.196369328 -570.553430392 c 0 + 926.838789099 -560.106860784 926.838789099 -560.106860784 906.080232746 -540.385507945 c 0 + 861.780273438 -498.301459752 861.780273438 -498.301459752 861.780273438 -436.740234375 c 2 + 861.780273438 1636.74023438 l 2 + 861.780273438 1651.32239562 861.780273438 1651.32239562 864.624564811 1665.58641717 c 0 + 867.468856184 1679.85043872 867.468856184 1679.85043872 873.10986998 1693.10818737 c 0 + 878.772167602 1706.41519628 878.772167602 1706.41519628 887.133373164 1718.37257459 c 0 + 895.494578727 1730.3299529 895.494578727 1730.3299529 906.078821663 1740.38509515 c 0 + 948.831274571 1781 948.831274571 1781 1008.25976562 1781 c 0 + 1038.00042276 1781 1038.00042276 1781 1064.62771862 1769.67040346 c 0 + 1073.50484059 1765.89307777 1073.50484059 1765.89307777 1081.84644385 1760.86774412 c 0 + 1090.18804712 1755.84241046 1090.18804712 1755.84241046 1097.70707391 1749.78666415 c 0 + 1105.2261007 1743.73091784 1105.2261007 1743.73091784 1111.90386462 1736.70127707 c 0 + 1116.65951952 1731.69555114 1116.65951952 1731.69555114 1120.93180299 1726.3118946 c 0 + 1125.20408645 1720.92823807 1125.20408645 1720.92823807 1128.97353615 1715.18962916 c 0 + 1132.74298584 1709.45102026 1132.74298584 1709.45102026 1135.97975475 1703.34407818 c 0 + 1139.21652366 1697.2371361 1139.21652366 1697.2371361 1141.83366456 1690.90032844 c 0 + 1145.36294721 1682.35569623 1145.36294721 1682.35569623 1147.74798058 1673.36655214 c 0 + 1150.13301394 1664.37740804 1150.13301394 1664.37740804 1151.3262726 1655.19274645 c 0 + 1152.51953125 1646.00808487 1152.51953125 1646.00808487 1152.51953125 1636.74023438 c 2 + 1152.51953125 -436.740234375 l 2 +EndSplineSet +EndChar EndChars EndSplineFont diff -r 9d304ef5c932 -r f4a80cfb2781 CONTRIBUTORS --- a/CONTRIBUTORS Mon Sep 20 14:24:11 2021 +0200 +++ b/CONTRIBUTORS Thu Oct 07 10:20:10 2021 +0200 @@ -6,6 +6,9 @@ Contributions to Isabelle2021-1 ------------------------------- +* July .. September 2021: Makarius Wenzel + Significantly improved Isabelle/Haskell library. + * July 2021: Florian Haftmann Further consolidation of bit operations and word types. diff -r 9d304ef5c932 -r f4a80cfb2781 NEWS --- a/NEWS Mon Sep 20 14:24:11 2021 +0200 +++ b/NEWS Thu Oct 07 10:20:10 2021 +0200 @@ -4,8 +4,8 @@ (Note: Isabelle/jEdit shows a tree-view of the NEWS file in Sidekick.) -New in Isabelle2021 (December 2021) ------------------------------------ +New in Isabelle2021-1 (December 2021) +------------------------------------- *** General *** @@ -30,6 +30,13 @@ See also the group "Z Notation" in the Symbols dockable of Isabelle/jEdit. +* The Isabelle/Haskell library ($ISABELLE_HOME/src/Tools/Haskell) has +been significantly improved. In particular, module Isabelle.Bytes +provides type Bytes for light-weight byte strings (with optional UTF8 +interpretation), similar to type string in Isabelle/ML. Isabelle symbols +now work uniformly in Isabelle/Haskell vs. Isabelle/ML vs. +Isabelle/Scala/PIDE. + *** Isar *** @@ -59,8 +66,8 @@ *** Document preparation *** -* More predefined symbols: \ \ (package "stmaryrd"), \ \ (LaTeX package -"pifont"). +* More predefined symbols: \ \ \ (package "stmaryrd"), \ \ (LaTeX +package "pifont"). * High-quality blackboard-bold symbols from font "txmia" (LaTeX package "pxfonts"): \\\\\\\\\\\\\\\\\\\\\\\\\\. @@ -183,13 +190,20 @@ INCOMPATIBILITY. * Sledgehammer: - - Removed legacy "lam_lifting" (synonym for "lifting") from option - "lam_trans". Minor INCOMPATIBILITY. - - Renamed "hide_lams" to "opaque_lifting" in option "lam_trans". Minor - INCOMPATIBILITY. - - Added "opaque_combs" to option "lam_trans": lambda expressions are - rewritten using combinators, but the combinators are kept opaque, - i.e. without definitions. + - Update of bundled provers: + E 2.6 + Vampire 4.6 (with Open Source license) + veriT 2021.06-rmx + Zipperposition 2.1 + - Adjusted default provers: + cvc4 vampire verit e spass z3 zipperposition + - Removed legacy "lam_lifting" (synonym for "lifting") from option + "lam_trans". Minor INCOMPATIBILITY. + - Renamed "hide_lams" to "opaque_lifting" in option "lam_trans". Minor + INCOMPATIBILITY. + - Added "opaque_combs" to option "lam_trans": lambda expressions are + rewritten using combinators, but the combinators are kept opaque, + i.e. without definitions. * Metis: Renamed option "hide_lams" to "opaque_lifting". Minor INCOMPATIBILITY. @@ -329,8 +343,11 @@ The main Isabelle/ML interface is Isabelle_System.bash_process with result type Process_Result.T (resembling class Process_Result in Scala); derived operations Isabelle_System.bash and Isabelle_System.bash_output -provide similar functionality as before. Rare INCOMPATIBILITY due to -subtle semantic differences: +provide similar functionality as before. The underlying TCP/IP server +within Isabelle/Scala is available to other programming languages as +well, notably Isabelle/Haskell. + +Rare INCOMPATIBILITY due to subtle semantic differences: - Processes invoked from Isabelle/ML actually run in the context of the Java VM of Isabelle/Scala. The settings environment and current @@ -352,20 +369,19 @@ like Isabelle_System.with_tmp_file to create a file name and File.read to retrieve its content. - - Just like any other Scala function invoked from ML, - Isabelle_System.bash_process requires a proper PIDE session context. - This could be a regular batch session (e.g. "isabelle build"), a - PIDE editor session (e.g. "isabelle jedit"), or headless PIDE (e.g. - "isabelle dump" or "isabelle server"). Note that old "isabelle - console" or raw "isabelle process" don't have that. + - The Isabelle/Scala "bash_process" server requires a PIDE session + context. This could be a regular batch session (e.g. "isabelle + build"), a PIDE editor session (e.g. "isabelle jedit"), or headless + PIDE (e.g. "isabelle dump" or "isabelle server"). Note that old + "isabelle console" or raw "isabelle process" don't have that. New Process_Result.timing works as in Isabelle/Scala, based on direct measurements of the bash_process wrapper in C: elapsed time is always available, CPU time is only available on Linux and macOS, GC time is unavailable. -* Likewise, the following Isabelle/ML system operations are run in the -context of Isabelle/Scala: +* The following Isabelle/ML system operations are run in the context of +Isabelle/Scala, within a PIDE session context: - Isabelle_System.make_directory - Isabelle_System.copy_dir @@ -388,6 +404,8 @@ *** System *** +* Update to OpenJDK 17: the current long-term support version of Java. + * Each Isabelle component may specify a Scala/Java jar module declaratively via etc/build.props (file names are relative to the component directory). E.g. see $ISABELLE_HOME/etc/build.props with diff -r 9d304ef5c932 -r f4a80cfb2781 etc/symbols --- a/etc/symbols Mon Sep 20 14:24:11 2021 +0200 +++ b/etc/symbols Thu Oct 07 10:20:10 2021 +0200 @@ -301,6 +301,7 @@ \ code: 0x00227c group: relation \ code: 0x00227d group: relation \ code: 0x002225 group: relation abbrev: || +\ code: 0x002016 group: relation abbrev: || \ code: 0x002af4 group: relation abbrev: || \ code: 0x002afd group: relation abbrev: || \ code: 0x0000a6 group: punctuation abbrev: || diff -r 9d304ef5c932 -r f4a80cfb2781 lib/texinputs/isabellesym.sty --- a/lib/texinputs/isabellesym.sty Mon Sep 20 14:24:11 2021 +0200 +++ b/lib/texinputs/isabellesym.sty Thu Oct 07 10:20:10 2021 +0200 @@ -303,6 +303,7 @@ \newcommand{\isasympreceq}{\isamath{\preceq}} \newcommand{\isasymsucceq}{\isamath{\succeq}} \newcommand{\isasymparallel}{\isamath{\parallel}} +\newcommand{\isasymParallel}{\isamath{\bigparallel}} %requires stmaryrd \newcommand{\isasyminterleace}{\isamath{\interleave}} %requires stmaryrd \newcommand{\isasymsslash}{\isamath{\sslash}} %requires stmaryrd \newcommand{\isasymbar}{\isamath{\mid}} diff -r 9d304ef5c932 -r f4a80cfb2781 src/CCL/CCL.thy --- a/src/CCL/CCL.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/CCL/CCL.thy Thu Oct 07 10:20:10 2021 +0200 @@ -232,15 +232,15 @@ ML \ local - fun pairs_of f x [] = [] + fun pairs_of _ _ [] = [] | pairs_of f x (y::ys) = (f x y) :: (f y x) :: (pairs_of f x ys) - fun mk_combs ff [] = [] + fun mk_combs _ [] = [] | mk_combs ff (x::xs) = (pairs_of ff x xs) @ mk_combs ff xs (* Doesn't handle binder types correctly *) fun saturate thy sy name = - let fun arg_str 0 a s = s + let fun arg_str 0 _ s = s | arg_str 1 a s = "(" ^ a ^ "a" ^ s ^ ")" | arg_str n a s = arg_str (n-1) a ("," ^ a ^ (chr((ord "a")+n-1)) ^ s) val T = Sign.the_const_type thy (Sign.intern_const thy sy); diff -r 9d304ef5c932 -r f4a80cfb2781 src/CCL/Term.thy --- a/src/CCL/Term.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/CCL/Term.thy Thu Oct 07 10:20:10 2021 +0200 @@ -45,15 +45,11 @@ definition ncase :: "[i,i,i\i]\i" where "ncase(n,b,c) == when(n, \x. b, \y. c(y))" - -no_syntax - "_Let" :: "[letbinds, 'a] => 'a" ("(let (_)/ in (_))" 10) +definition "let1" :: "[i,i\i]\i" + where let_def: "let1(t, f) == case(t,f(true),f(false), \x y. f(), \u. f(lam x. u(x)))" -definition "let" :: "[i,i\i]\i" - where "let(t, f) == case(t,f(true),f(false), \x y. f(), \u. f(lam x. u(x)))" - -syntax - "_Let" :: "[letbinds, 'a] => 'a" ("(let (_)/ in (_))" 10) +syntax "_let1" :: "[idt,i,i]\i" ("(3let _ be _/ in _)" [0,0,60] 60) +translations "let x be a in e" == "CONST let1(a, \x. e)" definition letrec :: "[[i,i\i]\i,(i\i)\i]\i" where "letrec(h, b) == b(\x. fix(\f. lam x. h(x,\y. f`y))`x)" @@ -68,67 +64,65 @@ \g'. f(\x y z. g'(>)))" syntax - "_let" :: "[id,i,i]\i" ("(3let _ be _/ in _)" [0,0,60] 60) - "_letrec" :: "[id,id,i,i]\i" ("(3letrec _ _ be _/ in _)" [0,0,0,60] 60) - "_letrec2" :: "[id,id,id,i,i]\i" ("(3letrec _ _ _ be _/ in _)" [0,0,0,0,60] 60) - "_letrec3" :: "[id,id,id,id,i,i]\i" ("(3letrec _ _ _ _ be _/ in _)" [0,0,0,0,0,60] 60) - -ML \ -(** Quantifier translations: variable binding **) - -(* FIXME does not handle "_idtdummy" *) -(* FIXME should use Syntax_Trans.mark_bound, Syntax_Trans.variant_abs' *) - -fun let_tr [Free x, a, b] = Const(\<^const_syntax>\let\,dummyT) $ a $ absfree x b; -fun let_tr' [a,Abs(id,T,b)] = - let val (id',b') = Syntax_Trans.variant_abs(id,T,b) - in Const(\<^syntax_const>\_let\,dummyT) $ Free(id',T) $ a $ b' end; - -fun letrec_tr [Free f, Free x, a, b] = - Const(\<^const_syntax>\letrec\, dummyT) $ absfree x (absfree f a) $ absfree f b; -fun letrec2_tr [Free f, Free x, Free y, a, b] = - Const(\<^const_syntax>\letrec2\, dummyT) $ absfree x (absfree y (absfree f a)) $ absfree f b; -fun letrec3_tr [Free f, Free x, Free y, Free z, a, b] = - Const(\<^const_syntax>\letrec3\, dummyT) $ - absfree x (absfree y (absfree z (absfree f a))) $ absfree f b; + "_letrec" :: "[idt,idt,i,i]\i" ("(3letrec _ _ be _/ in _)" [0,0,0,60] 60) + "_letrec2" :: "[idt,idt,idt,i,i]\i" ("(3letrec _ _ _ be _/ in _)" [0,0,0,0,60] 60) + "_letrec3" :: "[idt,idt,idt,idt,i,i]\i" ("(3letrec _ _ _ _ be _/ in _)" [0,0,0,0,0,60] 60) +parse_translation \ + let + fun abs_tr t u = Syntax_Trans.abs_tr [t, u]; + fun letrec_tr [f, x, a, b] = + Syntax.const \<^const_syntax>\letrec\ $ abs_tr x (abs_tr f a) $ abs_tr f b; + fun letrec2_tr [f, x, y, a, b] = + Syntax.const \<^const_syntax>\letrec2\ $ abs_tr x (abs_tr y (abs_tr f a)) $ abs_tr f b; + fun letrec3_tr [f, x, y, z, a, b] = + Syntax.const \<^const_syntax>\letrec3\ $ abs_tr x (abs_tr y (abs_tr z (abs_tr f a))) $ abs_tr f b; + in + [(\<^syntax_const>\_letrec\, K letrec_tr), + (\<^syntax_const>\_letrec2\, K letrec2_tr), + (\<^syntax_const>\_letrec3\, K letrec3_tr)] + end +\ +print_translation \ + let + val bound = Syntax_Trans.mark_bound_abs; -fun letrec_tr' [Abs(x,T,Abs(f,S,a)),Abs(ff,SS,b)] = - let val (f',b') = Syntax_Trans.variant_abs(ff,SS,b) - val (_,a'') = Syntax_Trans.variant_abs(f,S,a) - val (x',a') = Syntax_Trans.variant_abs(x,T,a'') - in Const(\<^syntax_const>\_letrec\,dummyT) $ Free(f',SS) $ Free(x',T) $ a' $ b' end; -fun letrec2_tr' [Abs(x,T,Abs(y,U,Abs(f,S,a))),Abs(ff,SS,b)] = - let val (f',b') = Syntax_Trans.variant_abs(ff,SS,b) - val ( _,a1) = Syntax_Trans.variant_abs(f,S,a) - val (y',a2) = Syntax_Trans.variant_abs(y,U,a1) - val (x',a') = Syntax_Trans.variant_abs(x,T,a2) - in Const(\<^syntax_const>\_letrec2\,dummyT) $ Free(f',SS) $ Free(x',T) $ Free(y',U) $ a' $ b' + fun letrec_tr' [Abs(x,T,Abs(f,S,a)),Abs(ff,SS,b)] = + let + val (f',b') = Syntax_Trans.print_abs(ff,SS,b) + val (_,a'') = Syntax_Trans.print_abs(f,S,a) + val (x',a') = Syntax_Trans.print_abs(x,T,a'') + in + Syntax.const \<^syntax_const>\_letrec\ $ bound(f',SS) $ bound(x',T) $ a' $ b' + end; + + fun letrec2_tr' [Abs(x,T,Abs(y,U,Abs(f,S,a))),Abs(ff,SS,b)] = + let + val (f',b') = Syntax_Trans.print_abs(ff,SS,b) + val ( _,a1) = Syntax_Trans.print_abs(f,S,a) + val (y',a2) = Syntax_Trans.print_abs(y,U,a1) + val (x',a') = Syntax_Trans.print_abs(x,T,a2) + in + Syntax.const \<^syntax_const>\_letrec2\ $ bound(f',SS) $ bound(x',T) $ bound(y',U) $ a' $ b' end; -fun letrec3_tr' [Abs(x,T,Abs(y,U,Abs(z,V,Abs(f,S,a)))),Abs(ff,SS,b)] = - let val (f',b') = Syntax_Trans.variant_abs(ff,SS,b) - val ( _,a1) = Syntax_Trans.variant_abs(f,S,a) - val (z',a2) = Syntax_Trans.variant_abs(z,V,a1) - val (y',a3) = Syntax_Trans.variant_abs(y,U,a2) - val (x',a') = Syntax_Trans.variant_abs(x,T,a3) - in Const(\<^syntax_const>\_letrec3\,dummyT) $ Free(f',SS) $ Free(x',T) $ Free(y',U) $ Free(z',V) $ a' $ b' + + fun letrec3_tr' [Abs(x,T,Abs(y,U,Abs(z,V,Abs(f,S,a)))),Abs(ff,SS,b)] = + let + val (f',b') = Syntax_Trans.print_abs(ff,SS,b) + val ( _,a1) = Syntax_Trans.print_abs(f,S,a) + val (z',a2) = Syntax_Trans.print_abs(z,V,a1) + val (y',a3) = Syntax_Trans.print_abs(y,U,a2) + val (x',a') = Syntax_Trans.print_abs(x,T,a3) + in + Syntax.const \<^syntax_const>\_letrec3\ $ + bound(f',SS) $ bound(x',T) $ bound(y',U) $ bound(z',V) $ a' $ b' end; + in + [(\<^const_syntax>\letrec\, K letrec_tr'), + (\<^const_syntax>\letrec2\, K letrec2_tr'), + (\<^const_syntax>\letrec3\, K letrec3_tr')] + end \ -parse_translation \ - [(\<^syntax_const>\_let\, K let_tr), - (\<^syntax_const>\_letrec\, K letrec_tr), - (\<^syntax_const>\_letrec2\, K letrec2_tr), - (\<^syntax_const>\_letrec3\, K letrec3_tr)] -\ - -print_translation \ - [(\<^const_syntax>\let\, K let_tr'), - (\<^const_syntax>\letrec\, K letrec_tr'), - (\<^const_syntax>\letrec2\, K letrec2_tr'), - (\<^const_syntax>\letrec3\, K letrec3_tr')] -\ - - definition nrec :: "[i,i,[i,i]\i]\i" where "nrec(n,b,c) == letrec g x be ncase(x, b, \y. c(y,g(y))) in g(n)" @@ -165,38 +159,31 @@ apply (unfold let_def) apply (erule rev_mp) apply (rule_tac t = "t" in term_case) - apply (simp_all add: caseBtrue caseBfalse caseBpair caseBlam) + apply simp_all done lemma letBabot: "let x be bot in f(x) = bot" - apply (unfold let_def) - apply (rule caseBbot) - done + unfolding let_def by (rule caseBbot) lemma letBbbot: "let x be t in bot = bot" apply (unfold let_def) apply (rule_tac t = t in term_case) apply (rule caseBbot) - apply (simp_all add: caseBtrue caseBfalse caseBpair caseBlam) + apply simp_all done lemma applyB: "(lam x. b(x)) ` a = b(a)" - apply (unfold apply_def) - apply (simp add: caseBtrue caseBfalse caseBpair caseBlam) - done + by (simp add: apply_def) lemma applyBbot: "bot ` a = bot" - apply (unfold apply_def) - apply (rule caseBbot) - done + unfolding apply_def by (rule caseBbot) lemma fixB: "fix(f) = f(fix(f))" apply (unfold fix_def) apply (rule applyB [THEN ssubst], rule refl) done -lemma letrecB: - "letrec g x be h(x,g) in g(a) = h(a,\y. letrec g x be h(x,g) in g(y))" +lemma letrecB: "letrec g x be h(x,g) in g(a) = h(a,\y. letrec g x be h(x,g) in g(y))" apply (unfold letrec_def) apply (rule fixB [THEN ssubst], rule applyB [THEN ssubst], rule refl) done @@ -205,8 +192,10 @@ method_setup beta_rl = \ Scan.succeed (fn ctxt => - SIMPLE_METHOD' (CHANGED o - simp_tac (ctxt addsimps @{thms rawBs} setloop (fn _ => stac ctxt @{thm letrecB})))) + let val ctxt' = Context_Position.set_visible false ctxt in + SIMPLE_METHOD' (CHANGED o + simp_tac (ctxt' addsimps @{thms rawBs} setloop (fn _ => stac ctxt @{thm letrecB}))) + end) \ lemma ifBtrue: "if true then t else u = t" diff -r 9d304ef5c932 -r f4a80cfb2781 src/CCL/Trancl.thy --- a/src/CCL/Trancl.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/CCL/Trancl.thy Thu Oct 07 10:20:10 2021 +0200 @@ -66,7 +66,6 @@ lemmas [intro] = compI idI and [elim] = compE idE - and [elim!] = pair_inject lemma comp_mono: "\r'<=r; s'<=s\ \ (r' O s') <= (r O s)" by blast @@ -202,8 +201,6 @@ done lemma trancl_into_trancl2: "\ : r; : r^+\ \ : r^+" - apply (rule r_into_trancl [THEN trans_trancl [THEN transD]]) - apply assumption+ - done + by (rule r_into_trancl [THEN trans_trancl [THEN transD]]) end diff -r 9d304ef5c932 -r f4a80cfb2781 src/Doc/Isar_Ref/Symbols.thy --- a/src/Doc/Isar_Ref/Symbols.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Doc/Isar_Ref/Symbols.thy Thu Oct 07 10:20:10 2021 +0200 @@ -37,4 +37,6 @@ \end{center} \ +external_file %invisible \~~/lib/texinputs/isabellesym.sty\ + end diff -r 9d304ef5c932 -r f4a80cfb2781 src/Doc/Isar_Ref/document/root.tex --- a/src/Doc/Isar_Ref/document/root.tex Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Doc/Isar_Ref/document/root.tex Thu Oct 07 10:20:10 2021 +0200 @@ -7,7 +7,7 @@ \usepackage{eurosym} \usepackage{pifont} \usepackage[english]{babel} -\usepackage[only,bigsqcap,fatsemi,interleave,sslash]{stmaryrd} +\usepackage[only,bigsqcap,fatsemi,bigparallel,interleave,sslash]{stmaryrd} \usepackage{graphicx} \let\intorig=\int %iman.sty redefines \int \usepackage{iman,extra,isar,proof} diff -r 9d304ef5c932 -r f4a80cfb2781 src/HOL/Analysis/Ball_Volume.thy --- a/src/HOL/Analysis/Ball_Volume.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/HOL/Analysis/Ball_Volume.thy Thu Oct 07 10:20:10 2021 +0200 @@ -1,4 +1,4 @@ -(* +(* File: HOL/Analysis/Ball_Volume.thy Author: Manuel Eberl, TU München *) @@ -25,11 +25,11 @@ text \ We first need the value of the following integral, which is at the core of - computing the measure of an \n + 1\-dimensional ball in terms of the measure of an + computing the measure of an \n + 1\-dimensional ball in terms of the measure of an \n\-dimensional one. \ lemma emeasure_cball_aux_integral: - "(\\<^sup>+x. indicator {-1..1} x * sqrt (1 - x\<^sup>2) ^ n \lborel) = + "(\\<^sup>+x. indicator {-1..1} x * sqrt (1 - x\<^sup>2) ^ n \lborel) = ennreal (Beta (1 / 2) (real n / 2 + 1))" proof - have "((\t. t powr (-1 / 2) * (1 - t) powr (real n / 2)) has_integral @@ -37,7 +37,7 @@ using has_integral_Beta_real[of "1/2" "n / 2 + 1"] by simp from nn_integral_has_integral_lebesgue[OF _ this] have "ennreal (Beta (1 / 2) (real n / 2 + 1)) = - nn_integral lborel (\t. ennreal (t powr (-1 / 2) * (1 - t) powr (real n / 2) * + nn_integral lborel (\t. ennreal (t powr (-1 / 2) * (1 - t) powr (real n / 2) * indicator {0^2..1^2} t))" by (simp add: mult_ac ennreal_mult' ennreal_indicator) also have "\ = (\\<^sup>+ x. ennreal (x\<^sup>2 powr - (1 / 2) * (1 - x\<^sup>2) powr (real n / 2) * (2 * x) * @@ -45,7 +45,7 @@ by (subst nn_integral_substitution[where g = "\x. x ^ 2" and g' = "\x. 2 * x"]) (auto intro!: derivative_eq_intros continuous_intros simp: set_borel_measurable_def) also have "\ = (\\<^sup>+ x. 2 * ennreal ((1 - x\<^sup>2) powr (real n / 2) * indicator {0..1} x) \lborel)" - by (intro nn_integral_cong_AE AE_I[of _ _ "{0}"]) + by (intro nn_integral_cong_AE AE_I[of _ _ "{0}"]) (auto simp: indicator_def powr_minus powr_half_sqrt field_split_simps ennreal_mult') also have "\ = (\\<^sup>+ x. ennreal ((1 - x\<^sup>2) powr (real n / 2) * indicator {0..1} x) \lborel) + (\\<^sup>+ x. ennreal ((1 - x\<^sup>2) powr (real n / 2) * indicator {0..1} x) \lborel)" @@ -54,7 +54,7 @@ by (subst nn_integral_real_affine[of _ "-1" 0]) (auto simp: indicator_def intro!: nn_integral_cong) hence "?I + ?I = \ + ?I" by simp - also have "\ = (\\<^sup>+ x. ennreal ((1 - x\<^sup>2) powr (real n / 2) * + also have "\ = (\\<^sup>+ x. ennreal ((1 - x\<^sup>2) powr (real n / 2) * (indicator {-1..0} x + indicator{0..1} x)) \lborel)" by (subst nn_integral_add [symmetric]) (auto simp: algebra_simps) also have "\ = (\\<^sup>+ x. ennreal ((1 - x\<^sup>2) powr (real n / 2) * indicator {-1..1} x) \lborel)" @@ -69,13 +69,10 @@ lemma real_sqrt_le_iff': "x \ 0 \ y \ 0 \ sqrt x \ y \ x \ y ^ 2" using real_le_lsqrt sqrt_le_D by blast -lemma power2_le_iff_abs_le: "y \ 0 \ (x::real) ^ 2 \ y ^ 2 \ abs x \ y" - by (subst real_sqrt_le_iff' [symmetric]) auto - text \ - Isabelle's type system makes it very difficult to do an induction over the dimension - of a Euclidean space type, because the type would change in the inductive step. To avoid - this problem, we instead formulate the problem in a more concrete way by unfolding the + Isabelle's type system makes it very difficult to do an induction over the dimension + of a Euclidean space type, because the type would change in the inductive step. To avoid + this problem, we instead formulate the problem in a more concrete way by unfolding the definition of the Euclidean norm. \ lemma emeasure_cball_aux: @@ -92,17 +89,17 @@ case (insert i A r) interpret product_sigma_finite "\_. lborel" by standard - have "emeasure (Pi\<^sub>M (insert i A) (\_. lborel)) + have "emeasure (Pi\<^sub>M (insert i A) (\_. lborel)) ({f. sqrt (\i\insert i A. (f i)\<^sup>2) \ r} \ space (Pi\<^sub>M (insert i A) (\_. lborel))) = nn_integral (Pi\<^sub>M (insert i A) (\_. lborel)) (indicator ({f. sqrt (\i\insert i A. (f i)\<^sup>2) \ r} \ space (Pi\<^sub>M (insert i A) (\_. lborel))))" by (subst nn_integral_indicator) auto - also have "\ = (\\<^sup>+ y. \\<^sup>+ x. indicator ({f. sqrt ((f i)\<^sup>2 + (\i\A. (f i)\<^sup>2)) \ r} \ - space (Pi\<^sub>M (insert i A) (\_. lborel))) (x(i := y)) + also have "\ = (\\<^sup>+ y. \\<^sup>+ x. indicator ({f. sqrt ((f i)\<^sup>2 + (\i\A. (f i)\<^sup>2)) \ r} \ + space (Pi\<^sub>M (insert i A) (\_. lborel))) (x(i := y)) \Pi\<^sub>M A (\_. lborel) \lborel)" using insert.prems insert.hyps by (subst product_nn_integral_insert_rev) auto - also have "\ = (\\<^sup>+ (y::real). \\<^sup>+ x. indicator {-r..r} y * indicator ({f. sqrt ((\i\A. (f i)\<^sup>2)) \ + also have "\ = (\\<^sup>+ (y::real). \\<^sup>+ x. indicator {-r..r} y * indicator ({f. sqrt ((\i\A. (f i)\<^sup>2)) \ sqrt (r ^ 2 - y ^ 2)} \ space (Pi\<^sub>M A (\_. lborel))) x \Pi\<^sub>M A (\_. lborel) \lborel)" proof (intro nn_integral_cong, goal_cases) case (1 y f) @@ -118,13 +115,13 @@ thus ?case using 1 \r > 0\ by (auto simp: sum_nonneg real_sqrt_le_iff' indicator_def PiE_def space_PiM dest!: *) qed - also have "\ = (\\<^sup>+ (y::real). indicator {-r..r} y * (\\<^sup>+ x. indicator ({f. sqrt ((\i\A. (f i)\<^sup>2)) + also have "\ = (\\<^sup>+ (y::real). indicator {-r..r} y * (\\<^sup>+ x. indicator ({f. sqrt ((\i\A. (f i)\<^sup>2)) \ sqrt (r ^ 2 - y ^ 2)} \ space (Pi\<^sub>M A (\_. lborel))) x \Pi\<^sub>M A (\_. lborel)) \lborel)" by (subst nn_integral_cmult) auto - also have "\ = (\\<^sup>+ (y::real). indicator {-r..r} y * emeasure (PiM A (\_. lborel)) + also have "\ = (\\<^sup>+ (y::real). indicator {-r..r} y * emeasure (PiM A (\_. lborel)) ({f. sqrt ((\i\A. (f i)\<^sup>2)) \ sqrt (r ^ 2 - y ^ 2)} \ space (Pi\<^sub>M A (\_. lborel))) \lborel)" using \finite A\ by (intro nn_integral_cong, subst nn_integral_indicator) auto - also have "\ = (\\<^sup>+ (y::real). indicator {-r..r} y * ennreal (unit_ball_vol (real (card A)) * + also have "\ = (\\<^sup>+ (y::real). indicator {-r..r} y * ennreal (unit_ball_vol (real (card A)) * (sqrt (r ^ 2 - y ^ 2)) ^ card A) \lborel)" proof (intro nn_integral_cong_AE, goal_cases) case 1 @@ -141,28 +138,28 @@ qed (insert elim, auto) qed qed - also have "\ = ennreal (unit_ball_vol (real (card A))) * + also have "\ = ennreal (unit_ball_vol (real (card A))) * (\\<^sup>+ (y::real). indicator {-r..r} y * (sqrt (r ^ 2 - y ^ 2)) ^ card A \lborel)" by (subst nn_integral_cmult [symmetric]) (auto simp: mult_ac ennreal_mult' [symmetric] indicator_def intro!: nn_integral_cong) also have "(\\<^sup>+ (y::real). indicator {-r..r} y * (sqrt (r ^ 2 - y ^ 2)) ^ card A \lborel) = - (\\<^sup>+ (y::real). r ^ card A * indicator {-1..1} y * (sqrt (1 - y ^ 2)) ^ card A + (\\<^sup>+ (y::real). r ^ card A * indicator {-1..1} y * (sqrt (1 - y ^ 2)) ^ card A \(distr lborel borel ((*) (1/r))))" using \r > 0\ by (subst nn_integral_distr) (auto simp: indicator_def field_simps real_sqrt_divide intro!: nn_integral_cong) - also have "\ = (\\<^sup>+ x. ennreal (r ^ Suc (card A)) * + also have "\ = (\\<^sup>+ x. ennreal (r ^ Suc (card A)) * (indicator {- 1..1} x * sqrt (1 - x\<^sup>2) ^ card A) \lborel)" using \r > 0\ by (subst lborel_distr_mult) (auto simp: nn_integral_density ennreal_mult' [symmetric] mult_ac) - also have "\ = ennreal (r ^ Suc (card A)) * (\\<^sup>+ x. indicator {- 1..1} x * + also have "\ = ennreal (r ^ Suc (card A)) * (\\<^sup>+ x. indicator {- 1..1} x * sqrt (1 - x\<^sup>2) ^ card A \lborel)" by (subst nn_integral_cmult) auto also note emeasure_cball_aux_integral also have "ennreal (unit_ball_vol (real (card A))) * (ennreal (r ^ Suc (card A)) * - ennreal (Beta (1/2) (card A / 2 + 1))) = + ennreal (Beta (1/2) (card A / 2 + 1))) = ennreal (unit_ball_vol (card A) * Beta (1/2) (card A / 2 + 1) * r ^ Suc (card A))" using \r > 0\ by (simp add: ennreal_mult' [symmetric] mult_ac) also have "unit_ball_vol (card A) * Beta (1/2) (card A / 2 + 1) = unit_ball_vol (Suc (card A))" - by (auto simp: unit_ball_vol_def Beta_def Gamma_eq_zero_iff field_simps + by (auto simp: unit_ball_vol_def Beta_def Gamma_eq_zero_iff field_simps Gamma_one_half_real powr_half_sqrt [symmetric] powr_add [symmetric]) also have "Suc (card A) = card (insert i A)" using insert.hyps by simp finally show ?case . @@ -182,11 +179,11 @@ proof (cases "r = 0") case False with r have r: "r > 0" by simp - have "(lborel :: 'a measure) = + have "(lborel :: 'a measure) = distr (Pi\<^sub>M Basis (\_. lborel)) borel (\f. \b\Basis. f b *\<^sub>R b)" by (rule lborel_eq) - also have "emeasure \ (cball 0 r) = - emeasure (Pi\<^sub>M Basis (\_. lborel)) + also have "emeasure \ (cball 0 r) = + emeasure (Pi\<^sub>M Basis (\_. lborel)) ({y. dist 0 (\b\Basis. y b *\<^sub>R b :: 'a) \ r} \ space (Pi\<^sub>M Basis (\_. lborel)))" by (subst emeasure_distr) (auto simp: cball_def) also have "{f. dist 0 (\b\Basis. f b *\<^sub>R b :: 'a) \ r} = {f. sqrt (\i\Basis. (f i)\<^sup>2) \ r}" @@ -227,7 +224,7 @@ text \ - Lastly, we now prove some nicer explicit formulas for the volume of the unit balls in + Lastly, we now prove some nicer explicit formulas for the volume of the unit balls in the cases of even and odd integer dimensions. \ lemma unit_ball_vol_even: @@ -240,7 +237,7 @@ "unit_ball_vol (real (2 * n + 1)) = (2 ^ (2 * Suc n) * fact (Suc n)) / fact (2 * Suc n) * pi ^ n" proof - - have "unit_ball_vol (real (2 * n + 1)) = + have "unit_ball_vol (real (2 * n + 1)) = pi powr (real n + 1 / 2) / Gamma (1 / 2 + real (Suc n))" by (simp add: unit_ball_vol_def field_simps) also have "pochhammer (1 / 2) (Suc n) = Gamma (1 / 2 + real (Suc n)) / Gamma (1 / 2)" @@ -250,7 +247,7 @@ also have "pi powr (real n + 1 / 2) / \ = pi ^ n / pochhammer (1 / 2) (Suc n)" by (simp add: powr_add powr_half_sqrt powr_realpow) finally show "unit_ball_vol (real (2 * n + 1)) = \" . - also have "pochhammer (1 / 2 :: real) (Suc n) = + also have "pochhammer (1 / 2 :: real) (Suc n) = fact (2 * Suc n) / (2 ^ (2 * Suc n) * fact (Suc n))" using fact_double[of "Suc n", where ?'a = real] by (simp add: divide_simps mult_ac) also have "pi ^n / \ = (2 ^ (2 * Suc n) * fact (Suc n)) / fact (2 * Suc n) * pi ^ n" @@ -263,7 +260,7 @@ "unit_ball_vol (numeral (Num.Bit1 n)) = 2 ^ (2 * Suc (numeral n)) * fact (Suc (numeral n)) / fact (2 * Suc (numeral n)) * pi ^ numeral n" (is ?th2) proof - - have "numeral (Num.Bit0 n) = (2 * numeral n :: nat)" + have "numeral (Num.Bit0 n) = (2 * numeral n :: nat)" by (simp only: numeral_Bit0 mult_2 ring_distribs) also have "unit_ball_vol \ = pi ^ numeral n / fact (numeral n)" by (rule unit_ball_vol_even) diff -r 9d304ef5c932 -r f4a80cfb2781 src/HOL/Finite_Set.thy --- a/src/HOL/Finite_Set.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/HOL/Finite_Set.thy Thu Oct 07 10:20:10 2021 +0200 @@ -373,6 +373,17 @@ lemma finite_vimage_iff: "bij h \ finite (h -` F) \ finite F" unfolding bij_def by (auto elim: finite_vimageD finite_vimageI) +lemma finite_inverse_image_gen: + assumes "finite A" "inj_on f D" + shows "finite {j\D. f j \ A}" + using finite_vimage_IntI [OF assms] + by (simp add: Collect_conj_eq inf_commute vimage_def) + +lemma finite_inverse_image: + assumes "finite A" "inj f" + shows "finite {j. f j \ A}" + using finite_inverse_image_gen [OF assms] by simp + lemma finite_Collect_bex [simp]: assumes "finite A" shows "finite {x. \y\A. Q x y} \ (\y\A. finite {x. Q x y})" diff -r 9d304ef5c932 -r f4a80cfb2781 src/HOL/Groups_Big.thy --- a/src/HOL/Groups_Big.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/HOL/Groups_Big.thy Thu Oct 07 10:20:10 2021 +0200 @@ -1560,6 +1560,20 @@ then show ?case by (force intro: mult_strict_mono' prod_nonneg) qed +lemma prod_le_power: + assumes A: "\i. i \ A \ 0 \ f i \ f i \ n" "card A \ k" and "n \ 1" + shows "prod f A \ n ^ k" + using A +proof (induction A arbitrary: k rule: infinite_finite_induct) + case (insert i A) + then obtain k' where k': "card A \ k'" "k = Suc k'" + using Suc_le_D by force + have "f i * prod f A \ n * n ^ k'" + using insert \n \ 1\ k' by (intro prod_nonneg mult_mono; force) + then show ?case + by (auto simp: \k = Suc k'\ insert.hyps) +qed (use \n \ 1\ in auto) + end lemma prod_mono2: diff -r 9d304ef5c932 -r f4a80cfb2781 src/HOL/Library/Countable_Set.thy --- a/src/HOL/Library/Countable_Set.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/HOL/Library/Countable_Set.thy Thu Oct 07 10:20:10 2021 +0200 @@ -110,6 +110,25 @@ using to_nat_on_infinite[of S, unfolded bij_betw_def] by (auto cong: bij_betw_cong intro: bij_betw_inv_into to_nat_on_infinite) +text \ + The sum/product over the enumeration of a finite set equals simply the sum/product over the set +\ +context comm_monoid_set +begin + +lemma card_from_nat_into: + "F (\i. h (from_nat_into A i)) {..i. h (from_nat_into A i)) {.. 'a" where "A = range f" "inj f" diff -r 9d304ef5c932 -r f4a80cfb2781 src/HOL/Library/Disjoint_Sets.thy --- a/src/HOL/Library/Disjoint_Sets.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/HOL/Library/Disjoint_Sets.thy Thu Oct 07 10:20:10 2021 +0200 @@ -167,6 +167,20 @@ by (intro disjointD[OF d]) auto qed +lemma disjoint_family_on_iff_disjoint_image: + assumes "\i. i \ I \ A i \ {}" + shows "disjoint_family_on A I \ disjoint (A ` I) \ inj_on A I" +proof + assume "disjoint_family_on A I" + then show "disjoint (A ` I) \ inj_on A I" + by (metis (mono_tags, lifting) assms disjoint_family_onD disjoint_family_on_disjoint_image inf.idem inj_onI) +qed (use disjoint_image_disjoint_family_on in metis) + +lemma card_UN_disjoint': + assumes "disjoint_family_on A I" "\i. i \ I \ finite (A i)" "finite I" + shows "card (\i\I. A i) = (\i\I. card (A i))" + using assms by (simp add: card_UN_disjoint disjoint_family_on_def) + lemma disjoint_UN: assumes F: "\i. i \ I \ disjoint (F i)" and *: "disjoint_family_on (\i. \(F i)) I" shows "disjoint (\i\I. F i)" @@ -217,6 +231,25 @@ using disjoint_UN[of "{C, B}" "\x. x"] by (auto simp add: disjoint_family_on_def) text \ + Sum/product of the union of a finite disjoint family +\ +context comm_monoid_set +begin + +lemma UNION_disjoint_family: + assumes "finite I" and "\i\I. finite (A i)" + and "disjoint_family_on A I" + shows "F g (\(A ` I)) = F (\x. F g (A x)) I" + using assms unfolding disjoint_family_on_def by (rule UNION_disjoint) + +lemma Union_disjoint_sets: + assumes "\A\C. finite A" and "disjoint C" + shows "F g (\C) = (F \ F) g C" + using assms unfolding disjoint_def by (rule Union_disjoint) + +end + +text \ The union of an infinite disjoint family of non-empty sets is infinite. \ lemma infinite_disjoint_family_imp_infinite_UNION: @@ -353,6 +386,11 @@ lemma finite_elements: "finite A \ partition_on A P \ finite P" using partition_onD1[of A P] by (simp add: finite_UnionD) +lemma product_partition: + assumes "partition_on A P" and "\p. p \ P \ finite p" + shows "card A = (\p\P. card p)" + using assms unfolding partition_on_def by (meson card_Union_disjoint) + subsection \Equivalence of partitions and equivalence classes\ lemma partition_on_quotient: diff -r 9d304ef5c932 -r f4a80cfb2781 src/HOL/Power.thy --- a/src/HOL/Power.thy Mon Sep 20 14:24:11 2021 +0200 +++ b/src/HOL/Power.thy Thu Oct 07 10:20:10 2021 +0200 @@ -810,6 +810,10 @@ by (auto intro!: power2_le_imp_le [OF _ abs_ge_zero]) qed +lemma power2_le_iff_abs_le: + "y \ 0 \ x\<^sup>2 \ y\<^sup>2 \ \x\ \ y" + by (metis abs_le_square_iff abs_of_nonneg) + lemma abs_square_le_1:"x\<^sup>2 \ 1 \ \x\ \ 1" using abs_le_square_iff [of x 1] by simp diff -r 9d304ef5c932 -r f4a80cfb2781 src/HOL/Tools/Sledgehammer/sledgehammer_commands.ML --- a/src/HOL/Tools/Sledgehammer/sledgehammer_commands.ML Mon Sep 20 14:24:11 2021 +0200 +++ b/src/HOL/Tools/Sledgehammer/sledgehammer_commands.ML Thu Oct 07 10:20:10 2021 +0200 @@ -177,7 +177,7 @@ (* The first ATP of the list is used by Auto Sledgehammer. *) fun default_provers_param_value mode ctxt = - [cvc4N, vampireN, veritN, eN, spassN, z3N, zipperpositionN] + [cvc4N, vampireN, veritN, eN, spassN, z3N, zipperpositionN] \ \see also \<^system_option>\sledgehammer_provers\\ |> map_filter (remotify_prover_if_not_installed ctxt) (* In "try" mode, leave at least one thread to another slow tool (e.g. Nitpick) *) |> take (Multithreading.max_threads () - (if mode = Try then 1 else 0)) diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/Admin/build_fonts.scala --- a/src/Pure/Admin/build_fonts.scala Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/Admin/build_fonts.scala Thu Oct 07 10:20:10 2021 +0200 @@ -57,6 +57,7 @@ 0x2013, // dash 0x2014, // dash 0x2015, // dash + 0x2016, // big parallel 0x2020, // dagger 0x2021, // double dagger 0x2022, // bullet diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/Admin/build_vampire.scala --- a/src/Pure/Admin/build_vampire.scala Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/Admin/build_vampire.scala Thu Oct 07 10:20:10 2021 +0200 @@ -1,7 +1,7 @@ /* Title: Pure/Admin/build_vampire.scala Author: Makarius -Build Isabelle Vampire component from repository. +Build Isabelle Vampire component from official download. */ package isabelle @@ -9,80 +9,92 @@ object Build_Vampire { - val default_repository = "https://github.com/vprover/vampire.git" - val default_version1 = "4.5.1" - val default_version2 = "df87588848db" + val default_download_url = "https://github.com/vprover/vampire/archive/refs/tags/v4.6.tar.gz" val default_jobs = 1 - def make_component_name(version: String): String = "vampire-" + version + def make_component_name(version: String): String = + "vampire-" + Library.try_unprefix("v", version).getOrElse(version) /* build Vampire */ def build_vampire( - repository: String = default_repository, - version1: String = default_version1, - version2: String = default_version2, + download_url: String = default_download_url, jobs: Int = default_jobs, component_name: String = "", verbose: Boolean = false, progress: Progress = new Progress, target_dir: Path = Path.current): Unit = { - Isabelle_System.require_command("git") Isabelle_System.require_command("cmake") Isabelle_System.with_tmp_dir("build")(tmp_dir => { - /* component and platform */ + /* component */ + + val Archive_Name = """^.*?([^/]+)$""".r + val Version = """^v?([0-9.]+)\.tar.gz$""".r - val component = proper_string(component_name) getOrElse make_component_name(version1) + val archive_name = + download_url match { + case Archive_Name(name) => name + case _ => error("Failed to determine source archive name from " + quote(download_url)) + } + + val version = + archive_name match { + case Version(version) => version + case _ => error("Failed to determine component version from " + quote(archive_name)) + } + + val component = proper_string(component_name) getOrElse make_component_name(version) val component_dir = Isabelle_System.new_directory(target_dir + Path.basic(component)) progress.echo("Component " + component_dir) + + /* platform */ + val platform_name = proper_string(Isabelle_System.getenv("ISABELLE_PLATFORM64")) getOrElse error("No 64bit platform") + val platform_dir = Isabelle_System.make_directory(component_dir + Path.basic(platform_name)) - /* clone repository */ + /* download source */ + + val archive_path = tmp_dir + Path.basic(archive_name) + Isabelle_System.download_file(download_url, archive_path, progress = progress) - progress.echo("Cloning repository " + repository) - progress.bash("git clone " + Bash.string(repository) + " vampire", - cwd = tmp_dir.file, echo = verbose).check + Isabelle_System.bash("tar xzf " + File.bash_path(archive_path), cwd = tmp_dir.file).check + val source_name = File.get_dir(tmp_dir) - val source_dir = tmp_dir + Path.explode("vampire") - - Isabelle_System.copy_file(source_dir + Path.explode("LICENCE"), component_dir) + Isabelle_System.bash( + "tar xzf " + archive_path + " && mv " + Bash.string(source_name) + " src", + cwd = component_dir.file).check - /* build versions */ + /* build */ - for { (rev, exe) <- List(version1 -> "vampire", version2 -> "vampire_polymorphic") } { - progress.echo("Building " + exe + " (rev " + rev + ")") - progress.bash("git checkout --quiet --detach " + Bash.string(rev), - cwd = source_dir.file, echo = verbose).check + progress.echo("Building Vampire for " + platform_name + " ...") - val build_dir = source_dir + Path.explode("build") - Isabelle_System.rm_tree(build_dir) - Isabelle_System.make_directory(build_dir) + val build_dir = tmp_dir + Path.basic(source_name) + Isabelle_System.copy_file(build_dir + Path.explode("LICENCE"), component_dir) - val cmake_opts = if (Platform.is_linux) "-DBUILD_SHARED_LIBS=0 " else "" - val cmake_out = - progress.bash("cmake " + cmake_opts + """-G "Unix Makefiles" ..""", - cwd = build_dir.file, echo = verbose).check.out + val cmake_opts = if (Platform.is_linux) "-DBUILD_SHARED_LIBS=0 " else "" + val cmake_out = + progress.bash("cmake " + cmake_opts + """-G "Unix Makefiles" .""", + cwd = build_dir.file, echo = verbose).check.out - val Pattern = """-- Setting binary name to '?([^\s']*)'?""".r - val binary = - split_lines(cmake_out).collectFirst({ case Pattern(name) => name }) - .getOrElse(error("Failed to determine binary name from cmake output:\n" + cmake_out)) + val Pattern = """-- Setting binary name to '?([^\s']*)'?""".r + val binary = + split_lines(cmake_out).collectFirst({ case Pattern(name) => name }) + .getOrElse(error("Failed to determine binary name from cmake output:\n" + cmake_out)) - progress.bash("make -j" + jobs, cwd = build_dir.file, echo = verbose).check + progress.bash("make -j" + jobs, cwd = build_dir.file, echo = verbose).check - Isabelle_System.copy_file(build_dir + Path.basic("bin") + Path.basic(binary).platform_exe, - platform_dir + Path.basic(exe).platform_exe) - } + Isabelle_System.copy_file(build_dir + Path.basic("bin") + Path.basic(binary).platform_exe, + platform_dir + Path.basic("vampire").platform_exe) /* settings */ @@ -94,26 +106,16 @@ VAMPIRE_HOME="$COMPONENT/$ISABELLE_PLATFORM64" ISABELLE_VAMPIRE="$VAMPIRE_HOME/vampire" -ISABELLE_VAMPIRE_POLYMORPHIC="$VAMPIRE_HOME/vampire_polymorphic" """) /* README */ File.write(component_dir + Path.basic("README"), - "This Isabelle component provides two versions of Vampire from\n" + repository + """ - - * vampire: standard version (regular stable release) - * vampire_polymorphic: special version for polymorphic FOL and HOL - (intermediate repository version) + "This Isabelle component provides Vampire " + version + """using the +original sources from """.stripMargin + download_url + """ -The executables have been built like this: - - git checkout COMMIT - cmake . - make - -The precise commit id is revealed by executing "vampire --version". +The executables have been built via "cmake . && make" Makarius @@ -129,9 +131,7 @@ args => { var target_dir = Path.current - var repository = default_repository - var version1 = default_version1 - var version2 = default_version2 + var download_url = default_download_url var jobs = default_jobs var component_name = "" var verbose = false @@ -141,19 +141,16 @@ Options are: -D DIR target directory (default ".") - -U URL repository (default: """" + default_repository + """") - -V REV1 standard version (default: """" + default_version1 + """") - -W REV2 polymorphic version (default: """" + default_version2 + """") + -U URL download URL + (default: """" + default_download_url + """") -j NUMBER parallel jobs for make (default: """ + default_jobs + """) - -n NAME component name (default: """" + make_component_name("REV1") + """") + -n NAME component name (default: """" + make_component_name("VERSION") + """") -v verbose Build prover component from official download. """, "D:" -> (arg => target_dir = Path.explode(arg)), - "U:" -> (arg => repository = arg), - "V:" -> (arg => version1 = arg), - "W:" -> (arg => version2 = arg), + "U:" -> (arg => download_url = arg), "j:" -> (arg => jobs = Value.Nat.parse(arg)), "n:" -> (arg => component_name = arg), "v" -> (_ => verbose = true)) @@ -163,8 +160,7 @@ val progress = new Console_Progress() - build_vampire(repository = repository, version1 = version1, version2 = version2, - component_name = component_name, jobs = jobs, verbose = verbose, progress = progress, - target_dir = target_dir) + build_vampire(download_url = download_url, component_name = component_name, + jobs = jobs, verbose = verbose, progress = progress, target_dir = target_dir) }) } diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/Admin/build_zipperposition.scala --- a/src/Pure/Admin/build_zipperposition.scala Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/Admin/build_zipperposition.scala Thu Oct 07 10:20:10 2021 +0200 @@ -22,7 +22,7 @@ { Isabelle_System.with_tmp_dir("build")(build_dir => { - if (!Platform.is_windows) Isabelle_System.require_command("patchelf") + if (Platform.is_linux) Isabelle_System.require_command("patchelf") /* component */ diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/Admin/isabelle_cronjob.scala --- a/src/Pure/Admin/isabelle_cronjob.scala Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/Admin/isabelle_cronjob.scala Thu Oct 07 10:20:10 2021 +0200 @@ -315,7 +315,7 @@ List( List(Remote_Build("Linux A", "augsburg1", options = "-m32 -B -M1x2,2,4" + - " -e ISABELLE_OCAML=ocaml -e ISABELLE_OCAMLC=ocamlc -e ISABELLE_OCAMLFIND=ocamlfind -e ISABELLE_OCAML_SETUP=true" + + " -e ISABELLE_OCAML=ocaml -e ISABELLE_OCAMLC=ocamlc -e ISABELLE_OCAMLFIND=ocamlfind" + " -e ISABELLE_GHC_SETUP=true" + " -e ISABELLE_MLTON=mlton" + " -e ISABELLE_SMLNJ=sml" + diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/Isar/toplevel.ML --- a/src/Pure/Isar/toplevel.ML Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/Isar/toplevel.ML Thu Oct 07 10:20:10 2021 +0200 @@ -10,6 +10,7 @@ type state val init_toplevel: unit -> state val theory_toplevel: theory -> state + val get_prev_theory: theory -> serial val is_toplevel: state -> bool val is_theory: state -> bool val is_proof: state -> bool @@ -146,6 +147,14 @@ fun init_toplevel () = State (node_presentation Toplevel, NONE); fun theory_toplevel thy = State (node_presentation (Theory (Context.Theory thy)), NONE); +val prev_theory = Config.declare_int ("prev_theory", Position.none) (K 0); +fun get_prev_theory thy = Config.get_global thy prev_theory; +fun set_prev_theory (State (_, SOME prev_thy)) (Theory gthy) = + let + val put = Config.put_global prev_theory (Context.theory_identifier prev_thy); + val gthy' = gthy |> Context.mapping put (Local_Theory.raw_theory put); + in Theory gthy' end + | set_prev_theory _ node = node; fun level state = (case node_of state of @@ -302,7 +311,7 @@ Runtime.controlled_execution (try generic_theory_of state) (fn () => (f int state; State (node_presentation node, previous_theory_of state))) () | (Transaction _, Toplevel) => raise UNDEF - | (Transaction (f, g), node) => apply (fn x => f int x) g node + | (Transaction (f, g), node) => apply (fn x => f int x) g (set_prev_theory state node) | _ => raise UNDEF); fun apply_union _ [] state = raise FAILURE (state, UNDEF) diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/Syntax/syntax_trans.ML --- a/src/Pure/Syntax/syntax_trans.ML Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/Syntax/syntax_trans.ML Thu Oct 07 10:20:10 2021 +0200 @@ -38,8 +38,7 @@ val mk_binder_tr': string * string -> string * (Proof.context -> term list -> term) val preserve_binder_abs_tr': string -> string -> string * (Proof.context -> term list -> term) val preserve_binder_abs2_tr': string -> string -> string * (Proof.context -> term list -> term) - val variant_abs: string * typ * term -> string * term - val variant_abs': string * typ * term -> string * term + val print_abs: string * typ * term -> string * term val dependent_tr': string * string -> term list -> term val antiquote_tr': string -> term -> term val quote_tr': string -> term -> term @@ -129,8 +128,7 @@ fun abs_tr [Free x, t] = absfree_proper x t | abs_tr [Const ("_idtdummy", T), t] = absdummy T t - | abs_tr [Const ("_constrain", _) $ x $ tT, t] = - Syntax.const "_constrainAbs" $ abs_tr [x, t] $ tT + | abs_tr [Const ("_constrain", _) $ x $ tT, t] = Syntax.const "_constrainAbs" $ abs_tr [x, t] $ tT | abs_tr ts = raise TERM ("abs_tr", ts); @@ -140,9 +138,7 @@ let fun err ts = raise TERM ("binder_tr: " ^ syn, ts) fun binder_tr [Const ("_idts", _) $ idt $ idts, t] = binder_tr [idt, binder_tr [idts, t]] - | binder_tr [x, t] = - let val abs = abs_tr [x, t] handle TERM _ => err [x, t] - in Syntax.const name $ abs end + | binder_tr [x, t] = Syntax.const name $ (abs_tr [x, t] handle TERM _ => err [x, t]) | binder_tr ts = err ts; in (syn, fn _ => binder_tr) end; @@ -392,16 +388,13 @@ (* dependent / nondependent quantifiers *) -fun var_abs mark (x, T, b) = +fun print_abs (x, T, b) = let val (x', _) = Name.variant x (Term.declare_term_names b Name.context) - in (x', subst_bound (mark (x', T), b)) end; - -val variant_abs = var_abs Free; -val variant_abs' = var_abs mark_bound_abs; + in (x', subst_bound (mark_bound_abs (x', T), b)) end; fun dependent_tr' (q, r) (A :: Abs (x, T, B) :: ts) = if Term.is_dependent B then - let val (x', B') = variant_abs' (x, dummyT, B); + let val (x', B') = print_abs (x, dummyT, B); in Term.list_comb (Syntax.const q $ mark_bound_abs (x', T) $ A $ B', ts) end else Term.list_comb (Syntax.const r $ A $ incr_boundvars ~1 B, ts) | dependent_tr' _ _ = raise Match; diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/Tools/build_docker.scala --- a/src/Pure/Tools/build_docker.scala Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/Tools/build_docker.scala Thu Oct 07 10:20:10 2021 +0200 @@ -15,7 +15,7 @@ private val Isabelle_Name = """^.*?(Isabelle[^/\\:]+)_linux\.tar\.gz$""".r val packages: List[String] = - List("curl", "less", "libfontconfig1", "libgomp1", "perl", "pwgen", "rlwrap", "unzip") + List("curl", "less", "libfontconfig1", "libgomp1", "pwgen", "rlwrap", "unzip") val package_collections: Map[String, List[String]] = Map("X11" -> List("libx11-6", "libxext6", "libxrender1", "libxtst6", "libxi6"), diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/Tools/mkroot.scala --- a/src/Pure/Tools/mkroot.scala Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/Tools/mkroot.scala Thu Oct 07 10:20:10 2021 +0200 @@ -85,8 +85,8 @@ %\""" + """usepackage{eurosym} %for \ -%\""" + """usepackage[only,bigsqcap,fatsemi,interleave,sslash]{stmaryrd} - %for \, \ +%\""" + """usepackage[only,bigsqcap,bigparallel,fatsemi,interleave,sslash]{stmaryrd} + %for \, \, \, \, \ %\""" + """usepackage{eufrak} %for \ ... \, \ ... \ (also included in amssymb) diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/context.ML --- a/src/Pure/context.ML Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/context.ML Thu Oct 07 10:20:10 2021 +0200 @@ -39,6 +39,7 @@ val theory_long_name: theory -> string val theory_name: theory -> string val theory_name': {long: bool} -> theory -> string + val theory_identifier: theory -> serial val PureN: string val pretty_thy: theory -> Pretty.T val pretty_abbrev_thy: theory -> Pretty.T @@ -155,7 +156,6 @@ val theory_identity = #1 o rep_theory; val theory_id = #theory_id o theory_identity; - val identity_of_id = #1 o rep_theory_id; val identity_of = identity_of_id o theory_id; val history_of_id = #2 o rep_theory_id; @@ -173,6 +173,7 @@ val theory_long_name = #name o history_of; val theory_name = Long_Name.base_name o theory_long_name; fun theory_name' {long} = if long then theory_long_name else theory_name; +val theory_identifier = #id o identity_of_id o theory_id; val parents_of = #parents o ancestry_of; val ancestors_of = #ancestors o ancestry_of; diff -r 9d304ef5c932 -r f4a80cfb2781 src/Pure/term.ML --- a/src/Pure/term.ML Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Pure/term.ML Thu Oct 07 10:20:10 2021 +0200 @@ -165,6 +165,7 @@ val could_beta_contract: term -> bool val could_eta_contract: term -> bool val could_beta_eta_contract: term -> bool + val used_free: string -> term -> bool val dest_abs: string * typ * term -> string * term val dummy_pattern: typ -> term val dummy: term diff -r 9d304ef5c932 -r f4a80cfb2781 src/Tools/Code/code_thingol.ML --- a/src/Tools/Code/code_thingol.ML Mon Sep 20 14:24:11 2021 +0200 +++ b/src/Tools/Code/code_thingol.ML Thu Oct 07 10:20:10 2021 +0200 @@ -622,9 +622,8 @@ pair (IVar (SOME v)) | translate_term ctxt algbr eqngr permissive some_thm (Abs (v, ty, t), some_abs) = let - val (v', t') = Syntax_Trans.variant_abs (Name.desymbolize (SOME false) v, ty, t); - val v'' = if member (op =) (Term.add_free_names t' []) v' - then SOME v' else NONE + val (v', t') = Term.dest_abs (Name.desymbolize (SOME false) v, ty, t); + val v'' = if Term.used_free v' t' then SOME v' else NONE in translate_typ ctxt algbr eqngr permissive ty ##>> translate_term ctxt algbr eqngr permissive some_thm (t', some_abs)