isar

Intro rule for “∀r>0” in Isabelle

£可爱£侵袭症+ 提交于 2019-12-11 08:09:36
问题 When I have a goal such as "∀x. P x" in Isabelle, I know that I can write show "∀x. P x" proof (rule allI) However, when the goal is "∀x>0. P x" , I cannot do that. Is there a similar rule/method that I can use after proof in order to simplify my goal? I would also be interested in one for the situation where you have a goal of the form "∃x>0. P x" . I'm looking for an Isar proof that uses the proof (rule something) style. 回答1: Universal quantifier To expand on Lars's answer: ∀x>0. P x is

How can I efficiently prove existential propositions with multiple variables in Isabelle/Isar?

自闭症网瘾萝莉.ら 提交于 2019-12-11 07:30:17
问题 Say I want to prove the lemma ∃ n m k . [n, m, k] = [2, 3, 5] in Isabelle/Isar. If I go ahead as suggested in the Isabelle/HOL tutorial on page 45, my proof looks as follows: lemma "∃ n m k . [n, m, k] = [2, 3, 5]" proof show "∃ m k . [2, m, k] = [2, 3, 5]" proof show "∃ k . [2, 3, k] = [2, 3, 5]" proof show "[2, 3, 5] = [2, 3, 5]" by simp qed qed qed Of course, this is way too verbose. How can I prove propositions like the above one such that the proofs are concise and readable? 回答1:

How type casting is possible in isabelle

橙三吉。 提交于 2019-12-08 09:52:43
问题 Supose I have the following code in Isabelle: typedecl type1 typedecl type2 typedecl type3 consts A::"type1 set" B::"type2 set" When I want to use union operation with A and B as bellow: axiomatization where c0: "A ∪ B = {}" Since A and B are sets of different types, I get an error of clash of types which makes sense! As a workaround I want to type cast A and B to both become sets of type "type3", so I can apply union operations to them. How this type casting is possible in isabelle in this

proof (rule disjE) for nested disjunction

余生颓废 提交于 2019-12-07 01:01:06
问题 In Isar-style Isabelle proofs, this works nicely: from `a ∨ b` have foo proof assume a show foo sorry next assume b show foo sorry qed The implicit rule called by proof here is rule conjE . But what should I put there to make it work for more than just one disjunction: from `a ∨ b ∨ c` have foo proof(?) assume a show foo sorry next assume b show foo sorry next assume c show foo sorry qed 回答1: While writing the question, I had an idea, and it turns out to be what I want: from `a ∨ b ∨ c` have

How to pass assumptions to interpretation of locale

巧了我就是萌 提交于 2019-12-04 05:34:38
问题 I would like to use some properties of my structure in the proof required by a locale interpretation As an example, suppose I defined the predicate P and proved some lemmas ( add is a closed binary operation, add is associative and there exists zero the neutral element) about the add operation on elements that satisfy the predicate P I would like to interpret then the set of my elements as a structure that satisfy some locale, e.g. monoid interpretation "{s . P s}" :: monoid "(add)" "(zero)"

Proof assistant for mathematics only

风格不统一 提交于 2019-12-03 07:40:30
Most proof assistants are functional programming languages with dependent types. They can proof programs/algorithms. I'm interested, instead, in proof assistant suitable best for mathematics and only (calculus for instance). Can you recommend one? I heard about Mizar but I don’t like that the source code is closed, but if it is best for math I will use it. How well the new languages such as Agda and Idris are suited for mathematical proofs? Coq has extensive libraries covering real analysis. Various developments come to mind: the standard library and projects building on it such as the now

How to pass assumptions to interpretation of locale

点点圈 提交于 2019-12-02 04:10:37
I would like to use some properties of my structure in the proof required by a locale interpretation As an example, suppose I defined the predicate P and proved some lemmas ( add is a closed binary operation, add is associative and there exists zero the neutral element) about the add operation on elements that satisfy the predicate P I would like to interpret then the set of my elements as a structure that satisfy some locale, e.g. monoid interpretation "{s . P s}" :: monoid "(add)" "(zero)" unfolding monoid_def using add_is_associative zero_is_neutral but then in the goal of my proof I am not

proof (rule disjE) for nested disjunction

馋奶兔 提交于 2019-12-01 04:20:37
In Isar-style Isabelle proofs, this works nicely: from `a ∨ b` have foo proof assume a show foo sorry next assume b show foo sorry qed The implicit rule called by proof here is rule conjE . But what should I put there to make it work for more than just one disjunction: from `a ∨ b ∨ c` have foo proof(?) assume a show foo sorry next assume b show foo sorry next assume c show foo sorry qed While writing the question, I had an idea, and it turns out to be what I want: from `a ∨ b ∨ c` have foo proof(elim disjE) assume a show foo sorry next assume b show foo sorry next assume c show foo sorry qed

What is an Isabelle/HOL subtype? What Isar commands produce subtypes?

时光总嘲笑我的痴心妄想 提交于 2019-11-29 06:52:47
I'd like to know about Isabelle/HOL subtypes. I explain a little about why it's important to me in my partial answer to my last SO question: Trying to Treat Type Classes and Sub-types Like Sets and Subsets Basically, I only have one type, so it might be useful to me if I could exploit the power of HOL types through subtypes. I've done searches in the Isabelle documentation, on the Web, and on the Isabelle mailing lists. The word "subtype" is used, though not much, and it seems like it's not a super important part of the Isabelle vocabulary. Partly, I'd just like to know how to use the word