(*--{*\<^isub>`\``*) (*******************************************************************************) theory i130719_triv_forall_equality imports Complex_Main begin (*******************************************************************************) (*\The meaning of operator \<^isub>^\\<^isub>_ can possibly be derived from operator \<^isub>^\\<^isub>_ using rule \<^isub>^equal_intr_rule\<^isub>_.*) thm equal_intr_rule (* --"\\_eq:in:rul.Pu\\" o\ \<^isub>^\PROP phi \ PROP psi; PROP psi \ PROP phi\ \ PROP phi \ PROP psi\<^isub>_.*) theorem " (A \ B) \ (B \ A) \ (Trueprop A \ Trueprop B)" by(rule equal_intr_rule) --"\\_eq:in:rul.Pu\\" (*\The meaning of operator \<^isub>^\\<^isub>_ can possibily be derived from operator \<^isub>^\\<^isub>_ using rule \<^isub>^triv_forall_equality\<^isub>_, so the meaning of \<^isub>^\\<^isub>_ can possibly be derived from \<^isub>^\\<^isub>_ using \<^isub>^equal_intr_rule\<^isub>_. (THIS IS BOGUS. I don't know what all I can get out of \<^isub>^triv_forall_equality\<^isub>_, but it served its purpose for now.)*) thm triv_forall_equality (* --"\\_tr:fo:equ.Pu\\" o\ \<^isub>^(\x. PROP V) \ PROP V\<^isub>_.*) theorem "((\x. PROP V) \ PROP V)" apply(rule equal_intr_rule)(* --"\\_eq:in:rul.Pu\\" 2g\\<^isub>1\ \<^isub>^(\x. PROP V) \ PROP V\<^isub>_ \\<^isub>2\ \<^isub>^\x. PROP V \ PROP V\<^isub>_. This is to show that \<^isub>^apply(rule equal_intr_rule)\<^isub>_ will produces goals instead of completing the proof when no assumptions are given which match the assumptions of \<^isub>^equal_intr_rule\<^isub>_. This information and that of the next comment are used to set the stage for a comment below on the proof of \<^isub>^atomize_all\<^isub>_.*) oops theorem " ((\x. PROP V) \ PROP V) \ (PROP V \ (\x. PROP V)) \ ((\x. PROP V) \ PROP V)" by(rule equal_intr_rule)(* --"\\_eq:in:rul.Pu\\" The two assumptions of \<^isub>^equal_intr_rule\<^isub>_ are provided this time. Rather than produce two goals, \<^isub>^rule\<^isub>_ now completes the proof in one step, using only the rule \<^isub>^equal_intr_rule\<^isub>_.*) (*\Now consider the theorem \<^isub>^atomize_all\<^isub>_, it uses \<^isub>^\\<^isub>_ and \<^isub>^\\<^isub>_, but not \<^isub>^\\<^isub>_. If \<^isub>^atomize_all\<^isub>_ can be proved only using \<^isub>^equal_intr_rule\<^isub>_, then it seems the perspective is justified that all Isabelle/HOL logical meaning is a result of \<^isub>^prop\<^isub>_, schematic variables, \<^isub>^\\<^isub>_, and nothing more, or at least, \something more\ does not have to include \<^isub>^\\<^isub>_ and \<^isub>^\\<^isub>_. (NOT ALL BOGUS, BUT BOGUS.)*) thm atomize_all (* --"\\_at:all.H\\" o\ \<^isub>^(\x. P x) \ \x. P x\<^isub>_.*) theorem " ((\x. P x) \ (\x. P x)) \ ((\x. P x) \ (\x. P x)) \ ((\x. P x) \ Trueprop (\x. P x))" apply(rule equal_intr_rule)(* --"\\_eq:in:rul.Pu\\" 2g\\<^isub>1\ \<^isub>^\(\x. P x) \ \x. P x; \x. All P \ P x\ \ (\x. P x) \ \x. P x\<^isub>_ \\<^isub>2\ \<^isub>^\x. \(\x. P x) \ \x. P x; \x. All P \ P x\ \ \x. P x \ P x\<^isub>_. Life is not simple. The right assumptions were provided, but \<^isub>^rule\<^isub>_ did not use them. Instead, \<^isub>^rule\<^isub>_ produced two goals. The conclusion can still be proved, but it cannot be completed in one step with \<^isub>^equal_intr_rule\<^isub>_. It might be that \<^isub>^Trueprop\<^isub>_ operating on \<^isub>^(\x. P x)\<^isub>_ both automatically and explicitly causes complications. Having to use \<^isub>^simp\<^isub>_ below ends up being good. It shows that \<^isub>^\\<^isub>_ and \<^isub>^\\<^isub>_ appear to have a life of their own when it comes to rewriting.*) using[[simp_trace]] apply(simp only: triv_forall_equality)(* --"\\_tr:fo:equ.Pu\\" 2g\\<^isub>1\ \<^isub>^\True \ \x. True; All P \ True\ \ (\x. P x) \ \x. True\<^isub>_ \\<^isub>2\ \<^isub>^\x. \(\x. P x) \ \x. P x; \x. All P \ P x\ \ \x. P x \ P x\<^isub>_. Now it starts to get complicated. From the \<^isub>^simp\<^isub>_ trace, some rewriting is being done which is based on \<^isub>^\\<^isub>_. For example, from the second assumption given, a rewrite rule is created: \<^isub>^[1]SIMPLIFIER INVOKED ON THE FOLLOWING TERM:\<^isub>_ \<^isub>^((\x. P x) \ \x. P x) \ (\x. All P \ P x) \ (\x. P x) \ \x. P x\<^isub>_ \<^isub>^[1]Adding rewrite rule "??.unknown":\<^isub>_ \<^isub>^All P \ P ?x1 \ True.\<^isub>_ There is a \perspective\ problem with this. The simplifier appears to be using the presence of the symbol \<^isub>^\\<^isub>_ to decide that this is a rewrite rule. Addition- ally, the symbol \<^isub>^\\<^isub>_ is being used to state the new rewrite rule. Also, \<^isub>^triv_forall_equality\<^isub>_ is being used to do some rewriting. For example, there is the following rewriting: \<^isub>^[1]Applying instance of rewrite rule "Pure.triv_forall_equality":\<^isub>_ \<^isub>^(\x. PROP ?V) \ PROP ?V\<^isub>_ \<^isub>^[1]Rewriting:\<^isub>_ \<^isub>^(\x. True) \ True.\<^isub>_ Again, it appears that the meta-logic symbols \<^isub>^\\<^isub>_ and \<^isub>^\\<^isub>_ are used independently of \<^isub>^\\<^isub>_. If \<^isub>^simp\<^isub>_ is using \<^isub>^\\<^isub>_ to determine these equivalencies, it is not making it known.*) apply(simp only: simp_thms(35))(* --"\\_si:thm.H\\" 1g\\<^isub>1\ \<^isub>^\x. \(\x. P x) \ \x. P x; \x. All P \ P x\ \ \x. P x \ P x\<^isub>_. The rewriting \<^isub>^\x. True \ True\<^isub>_ is done to complete the previous goal.*) by(simp only: triv_forall_equality)(* --"\\_tr:fo:equ.Pu\\" And finally, more rewriting similar to what was done with the first use of \<^isub>^triv_forall_equality\<^isub>_.*) (*******************************************************************************) end (*******************************************************************************) (*``\\<^isub>`*}*)