isabelle


how to get isabelle to recognize an obvious conclusion


I'm trying to prove that the frontier, interior and exterior of a set are disjoint in isabelle. On the line I have marked '***', the fact that c \<inter> d = {} clearly follows from the previous line given the assumption at the start of the block, so how would I get isabelle to understand this?
theory Scratch
imports
"~~/src/HOL/Multivariate_Analysis/Topology_Euclidean_Space"
"~~/src/HOL/Probability/Sigma_Algebra"
begin
lemma boundary_disjoint: "disjoint {frontier S, interior S, interior (-S)}"
proof (rule disjointI)
fix c d assume sets:
"c \<in> {frontier S, interior S, interior (-S)}"
"d \<in> {frontier S, interior S, interior (-S)}"
and "c \<noteq> d"
show "c \<inter> d = {}"
proof cases
assume "c = frontier S \<and> d = interior S"
then show ?thesis using frontier_def by auto
next
assume "c = frontier S \<and> d = interior (-S)"
have "closure S \<inter> interior (-S) = {}" by (simp add: closure_interior)
hence "frontier S \<inter> interior (-S) = {}" using frontier_def by auto
*** then show ?thesis by auto
next
qed
qed
end
In Isar, you have to explicitly reference the facts you want to use. If you say that your goal follows from the previous line and the local assumption you made, you should give the assumption a name by writing assume A: "c = frontier S ∧ d = interior (-S)", and then you can prove your goal by with A have ?thesis by auto.
Why did I write have and not show? Well, there is another problem. You did a proof cases, but that uses the rule (P ⟹ Q) ⟹ (¬P ⟹ Q) ⟹ Q, i.e. it does a case distinction of the kind ‘Is P true or false?’. That is not what you want here.
One way to do your case distiction is by something like this:
from sets show "c ∩ d = {}"
proof (elim singletonE insertE)
insertE is an elimination rule for facts of the form x ∈ insert y A, and since {a,b,c} is just syntactic sugar for insert a (insert b (insert c A)), this is what you want. singletonE is similar, but specifically for x ∈ {y}; using singletonE instead of insertE means you do not get trivial cases with assumptions like x ∈ {}.
This gives you 9 cases, of which 3 are trivially solved by simp_all. The rest you have to prove yourself in Isar if you want to, but they can be solved quite easily by auto as well:
from sets and `c ≠ d` show "c ∩ d = {}"
by (auto simp: frontier_def closure_def interior_closure)

Related Links

Generating Isabelle HTML documentation *without proofs*
When would you use `presume` in an Isar proof?
how to create an object logic via thf
What Isabelle library to reuse for expressing that some function is a linear order (on some set)
Isabelle: how to print result of 1 + 2?
Inductive Set with Non-fixed Parameters
What Kind of Type Definitions are Legal in Local Contexts?
Isabelle: Sledgehammer finds a proof but it fails
How to hide defined constants
Inductive predicates for a fixed tuple parameter
proof (rule disjE) for nested disjunction
Canonical way to get a more specific lemma
Can I define multiple names for a theorem?
How do I remove duplicate subgoals in Isabelle?
Why won't Isabelle simplify the body of my “if _ then _ else” construct?
What rule does 'apply (rule)' or 'proof' use?

Categories

HOME
clips
gerrit
fluentd
google-api-php-client
react-virtualized
relayjs
react-router
programming-languages
fsm
umd
android-youtube-api
izpack
dax
quicklook
etl
php-7.1
n-gram
vb.net-2010
uitypeeditor
after-effects
facebook-page
angular-ui
clickonce
ehcache
realex-payments-api
dxf
p-value
centos6.5
assistant
log4js-node
wtx
windows-server-2000
r-raster
google-qpx-express-api
openoffice.org
gammu
wallpaper
fusionpbx
devextreme
lto
hockeyapp
dynamics-crm-2013
withings
twitch
ansible-playbook
dism
pdf-reactor
janrain
websphere-mq-fte
termination
clean-architecture
hls.js
dropbox-php
tizen-native-app
tropo
darcs
font-size
knpmenubundle
capacity
pearson
memory-alignment
cudafy.net
bind9
django-scheduler
account-kit
visual-c++-2008
httplistener
bonobo
measures
pcf
nsfilemanager
django-debug-toolbar
merge-conflict-resolution
qpid
ptrace
asp.net5
itextpdf
cloudbees
r-tree
sdhc
quicklisp
dukescript
sframe
apache-commons-fileupload
pretty-print
lustre
javax.mail
block-device
asp.net-dynamic-data
issuu
document-classification
dml
bundles
didselectrowatindexpath
imdbpy
gridcontrol
enterprisedb
typoscript2
rdoc
enter
nsobject
javap
swing-app-framework
temporal-database
mdac

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