isabelle


Isabelle: Class of topological vector spaces


I wanted to define the class of topological vector spaces in the obvious way:
theory foo
imports Real_Vector_Spaces
begin
class topological_vector = topological_space + real_vector +
assumes add_cont_fst: "∀a. continuous_on UNIV (λb. a + b)"
...
but I got the error Type inference imposes additional sort constraint topological_space of type parameter 'a of sort type
I tried introducing type constraints in the condition, and it looks like
continuous_on doesn't want to match with the default type 'a of the class.
Of course I can work around this by replacing continuity with equivalent conditions, I'm just curious why this doesn't work.
Inside a class definition in Isabelle/HOL, there may occur only one type variable (namely 'a), which has the default HOL sort type. Thus, one cannot formalise multi-parameter type classes. This also affects definitions inside type classes, which may depend only on the parameters of one type class. For example, you can define a predicate cont :: 'a set => ('a => 'a) => bool inside the type class context topological_space as follows
definition (in topological_space) cont :: "'a set ⇒ ('a ⇒ 'a) ⇒ bool"
where "cont s f = (∀x∈s. (f ---> f x) (at x within s))"
The target (in topological_space) tells the type class system that cont really depends only on one type. Thus, it is safe to use cont in assumptions of other type classes which inherit from topological_space.
Now, the predicate continuous_on in Isabelle/HOL has the type 'a set => ('a => 'b) => bool where both 'a and 'b must be of sort topological_space. Thus, continuous_on is more general than cont, because it allows different topological spaces a and b. Conversely, continuous_on cannot be defined within any one type class. Consequently, you cannot use continuous_on in assumptions of type classes either. This restriction is not specific to continuous_on, it appears for all kinds of morphisms, e.g. mono for order-preserving functions, homomorphisms between algebraic structures, etc. Single-parameter type classes just cannot express such things.
In your example, you get the error because Isabelle unifies all occuring type variables to 'a and then realises that continuous_on forces the sort topological_space on 'a, but for the above reasons, you may not depend on sorts in class specifications.
Nevertheless, there might be a simple way out. Just define cont as described above and use it in the assumptions of topological_vector instead of continuous_on. Outside of the class context, you can then prove that cont = continuous_on and derive the original assumption with continuous_on instead of cont. This keeps you from reasoning abstractly within the class context, but this is only a minor restriction.

Related Links

Defining functions between constants in Isabelle
Using the ordering locale with partial maps
Avoiding assumption with sledgehammer
Discriminant with Inequalities
Instances in locale declaration for Isabelle
How to interactively simplify a formula in a relational theory in Isabelle
Nonnegative Interval Integration
Widening the domain of a partial function
Automatically unfolding a record definition when accessor is used
Creating a datatype with inequalities in Isabelle
Isabelle Logic simple natural deduction test
Instantiating variables ending in a digit using where-attribute (Isabelle)
Using an existing definition in Isabelle/ Hol
Pending sort hypotheses
How can I use proved goals of locale interpretation to prove the remaining ones
Isabelle class obligation prove blue

Categories

HOME
arduino-uno
magnific-popup
push-notification
onedrive
tesseract
relay
xmpp
umd
fancybox
primary-key
vault
floating-action-button
quicklook
apache-cayenne
alignment
static-libraries
fatal-error
reactcsstransitiongroup
solaris-10
excel-vba-mac
nhibernate-envers
lucene.net
alpine
nodatime
lldb
xlsxwriter
excel-2007
trading
shopware
sparse-matrix
jaxb2
instant-messaging
google-cloud-endpoints-v2
xquery-3.0
copying
caret
mpmediaquery
wpf-controls
swisscomdev
serverside-rendering
theano.scan
reportbuilder
streamreader
elasticsearch-plugin
estimote
gpx
eclipse-gef
scorm
babel-core
jedis
react-scripts
errordocument
akka-cluster
gnome-shell-extensions
android-textview
file-writing
intrusion-detection
flash-cs5
php-internals
design-by-contract
xpath-1.0
fluid-dynamics
proj4js
python-green
tween
camanjs
cdt
winddk
java.util.concurrent
javafx-webengine
poller
meteor-velocity
viadeo
flexmojos
jsctypes
google-cloud-save
easy-install
mqx
kyotocabinet
isnullorempty
broken-links
propertyeditor
multipage
errai
nsmanagedobject
subgurim-maps
sql-server-profiler
imac
jmock
visitor-statistic
subviews
suppress
forums
compiler-specific
boost-smart-ptr
temporal-database
phonon

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App