On 8/11/16 1:50 PM, Mario Carneiro wrote:
Hi All,
This proposal originates from the definition checker v2.0 project, but
it has more general application. I want to introduce definitions:
df-nf $a |- ( NF ( x , ph ) <-> A. x ( ph -> A. x ph ) )
df-nfc $a |- ( NF_ ( x , A ) <-> A. y NF ( x , y e. A ) )
which will replace the direct usage of |- ( ph -> A. x ph ) in all hb*
theorems. This is obviously a large change, since these theorems are
used across the whole database. The notation is modeled after the
notation I have been using in my paper, but alternative suggestions are
welcome. The parentheses and comma are unnecessary since it's a prefix
axiom, but it looks a bit more natural that way IMO. The underscore in
NF_ will be rendered as an underline, and is meant to resemble the
similarity between [ A / x ] ph and [_ A / x ]_ B (but I think it is
also unambiguous - if you prefer we could use the same symbol NF for
both without issue).
I have considered this on and off over the years and never felt happy with it, so I never implemented it. A minor issue is that it doesn't mean what the textbook usage of "free" means; for example, x is free in x = x yet we have NF(x, x=x), so the notation is slightly misleading. More importantly, this is a very nonstandard notation (meaning that AFAIK it has never appeared in print anywhere) that would occur early in the development, where we go out of our way to be faithful to the literature and avoid any notation that isn't found in most logic and set theory texts (minor exceptions being df-sb and df-mo, but even those notations come from at least one logic book each). A person somewhat familiar with standard logic and set notation would no longer able to just jump into set.mm's elementary set theory without having to learn an unfamiliar and nonstandard notation; in particular, a casual scan through the elementary logic and set theory theorem lists would no longer be completely familiar (notationally). It somehow feels like it goes against the philosophy and/or purpose of set.mm.
If this was a specialized notation for a more advanced area of math, I would probably have no problems with it. But it will permeate everything and involve a major change to set.mm that would not be easy to reverse. Non-standard notation can be off-putting to a beginner, who is already struggling trying to correlate set.mm theorems to their textbook notation.
On 8/11/16 11:11 PM, Mario Carneiro wrote:More seriously, I think you overestimate the degree to which you are
tracking "standard logic". Metamath is odd in some places; its oddity is
maximal in the predicate calculus section, because that is where
substitution is defined, and substitution is not done the same way in
Metamath as in FOL. It is true that Metamath's notions are very subtly
different from standard FOL, but I think that only makes it more
important that they each be given names, and the names match the nearest
equivalent from FOL. Forall is not a binder in Metamath, but we still
call it forall.
I disagree. Yes, the axiom schemes were carefully devised so that we can pretend that forall behaves like a binary operation at the scheme level. But the object language is _exactly_ standard textbook FOL object language. From that object language we could back-derive the textbook FOL schemes with their concepts of binding and everything else, and with exactly the same properties and behavior of the forall. Once we instantiate a Metamath scheme to the object language, the forall is a binder in exactly the same sense as it is for standard FOL, because the instantiation _is_ exactly standard FOL. This is what some people don't seem to get, and I wish I knew how to communicate it better. Metamath's FOL schemes generate exactly and only the same actual theorems as the more complicated textbook schemes involving free and bound variable concepts. Once again, there is no difference in the object language! (I assume you know that, but I'm repeating it for everyone else.)
Actually, there is no difference in the metalanguage either! Metamath's axiom schemes _are_ standard FOL theorem schemes using a subset of the standard textbook FOL metalanguage (although not vice-versa). If our axiom schemes are viewed as FOL schemes (which is what they really are), forall is a binder in the same way as it is in standard FOL metalanguage because it _is_ standard FOL metalanguage. If viewed as a computer language, it _behaves_ like a binary operation because of the particular subset of textbook FOL metalanguage that we chose for our axiom schemes.
Substitution is not defined the same way as in FOL, but
we still call it substitution.
Our (proper) substitution, in the form of dfsb7, is exactly the formula used by Quine. And it is exactly equivalent to the recursive definition.
The not-free predicate is another core
concept in Metamath, and to not give it a name means to not give users a
place to look when they see these weird hypotheses in an unrelated
theorem way later, such as cleqf. If there was an "NF" symbol they could
at least use the symbol hints to find out about what this not-free stuff
is all about. |- ( ph -> A. x ph ) showing up in a random theorem may
not be unfamiliar and nonstandard *notation*, but it is absolutely an
unfamiliar and nonstandard *concept*.
It is explained clearly in many places. Even without an explanation, I can't believe that a competent logician couldn't figure out what the idiom |- ( ph -> A. x ph ) is trying to say. For others it's a simple pattern that is easy to learn and recognize. I don't see how it's harder to learn that pattern as it is to learn the NF definition.
No one has ever complained to me about not understanding |- ( ph -> A. x ph ) in all the years set.mm has existed. They have complained about many other things but not this. I think that is because it is explained clearly.
I think you are making a mountain out of molehill that will end up polluting set.mm with nonstandard NF symbols that don't exist in any book, unlike _every symbol_ in early set.mm. Right now, anyone familiar with textbook FOL and intro set theory, but unfamiliar with Metamath, can casually browse the theorem list and recognize the symbols in the early theorem list, making it attractive to them. Unfamiliar, nonstandard symbols may make or break that person's interest in looking into Metamath more. On the FOM list you've seen complaints that other proof languages look like computer garbage and would never be considered seriously for a math journal proof, and I think that's largely because symbols are unfamiliar and nonstandard.
One of the reasons I was able to prove ax10 is that at that point in the development, a very small set of defined notions is used by previous theorems. There is a limit to the number of different symbols I can intensely focus on at one time. If I had to mentally expand NFs all the time, I don't know if I would have achieved it. Believe it or not, even E. was stressful because I constantly had to mentally expand it to ~ A. ~, so few ax10 lemmas have E. in them.
People are different in their mental capabilities, and I can manipulate in my head only n different symbols at a time where maybe as a wild guess n ~= 7. Some people's n is smaller, A child I'm tutoring in math can multiply 2 large numbers expressed explicitly, but "simplifying" it with scientific notation is something he is struggling to get. Your n is probably larger than most people's so you may not appreciate the intimidation some people experience when seeing an unfamiliar math symbol.
You are talking about the Metamath language and its models. But what I mean is binding as it would be described by a user of standard FOL schemes. Thus in ( x = y -> E. x x = y ), they would consider the first x free, the 2nd x bound, and both y's free. Of course this binding is not a notion built into the set.mm axiom schemes, nor do we need it for manipulating these schemes.
For users of the standard FOL schemes, the notion propagates to the object language: in ( v_0 = v_1 -> E. v_0 v_0 = v_1 ), the first v_0 is free and the 2nd is bound; both v_1's are free. These notions are useful for manipulating the object language directly, as many proof languages do. But I would argue that they are not primitive notions of the object language - otherwise, how could set.mm's axiom schemes generate them without such notions?
Right, there are no wff or class variables at the object level in standard FOL. In principle, class notation must be eliminated first before we can generate object-level statements, although there are some shortcuts that can be used like inferring v_0 = v_0 from A = A.
Substitution is not defined the same way as in FOL, but
we still call it substitution.
Our (proper) substitution, in the form of dfsb7, is exactly the
formula used by Quine. And it is exactly equivalent to the
recursive definition.
This is not true. There are certain things our substitution can do which
the usual one can't, like having wff or class metavariables in it. And
there are things their definition can do and ours can't, like substitute
with proper class arguments. Just because it uses the same symbols
doesn't mean it means the same thing, because the foundations are
slightly different.
When I say proper substitution, I mean at the FOL level as defined in standard logic textbooks. Their recursive algorithm is precisely equivalent to df-sb. There is nothing textbook substitution can do that df-sb can't and vice-versa.
Substitution of classes for set variables (df-sbc) is rarely defined in set theory books. Quine's definition at proper classes is as far as I can tell unique, definitely not standard, and I don't recall that he even uses it for anything. Actually I don't recall seeing any df-sbc equivalent other than Quine's. Most set theory texts informally just use df-sb where the substituting term is always a set and thus can replace the first set variable in df-sb.
I don't know what you mean by having wff variables in it.
Unlike other definitions, it doesn't buy significant space savings.
It is not even accurate about its claim, since x is free in x = x. It feels like an ugly hack.
I wouldn't be so concerned if it was something in a specialized section of set.mm. I would greatly dislike having it permeate all of set.mm from the beginning. What I will do is put a link explaining |- ( ph -> A. x ph ) in every theorem comment using it. The intended human purpose of NF is to "explain" (inaccurately) what |- ( ph -> A. x ph ) is supposed to mean, and there's no reason an accurate explanation can't be linked to from the comment.
Also, I have heard exactly such complaints for metamath, concerning $d,
not so much because it's a difficult symbol, but because it's a
difficult concept. (Of course I don't see it as a particularly difficult
concept, but that's the main source of friction from established
logicians.)
I can't help but think they have other reasons for disliking Metamath and use this as an excuse. The concept of a variable not occurring in a formula is about as simple as it gets. Obviously they don't want to put in even a minimal effort, for whatever reason.
Have you pointed them to Tarski's system and papers?
Would they feel that the $d in Tarski's system is hard to understand? Tarski's whole point was to make a system _easier_ to understand than the standard FOL axiomatization, since the concept of a variable not occurring in a formula is much simpler than "not free" in a formula.
Would they be have trouble understanding the Tarski subset of set.mm's axiom schemes? If they can manage those, then they can be told that the 4 extra axioms (ax-6,7,11,12) can be ignored for the purpose of understanding the logic; they are merely technical devices needed to achieve our so-called "metalogical completeness".
On 8/13/16 3:08 AM, Mario Carneiro wrote:
On Sat, Aug 13, 2016 at 1:25 AM, Norman Megill <n...@alum.mit.edu
<mailto:n...@alum.mit.edu>> wrote:
An unfortunate fact that we have to live with is that regular
mathematics is not entirely done with symbols. They use words as well,
and we have to make symbols for them.
Two situations where words are used are (1) a side condition or proviso imposed on a statement, and (2) English prose used to describe the statements themselves like in say group theory theorems.
In the second case, of course we have to convert the English to formulas with invented symbols because that is what the prose is intended to mean.
In the first case, the side condition isn't intended to be part of the formula, and it doesn't make sense to convert the side condition to a formula. If it did make sense, why wouldn't a formula be used in the first place instead of an awkward side condition that can't be manipulated easily? It is because the side conditions can't be expressed in the language of the logic but involve a separate metalogical notion.
In set.mm, $d's are side conditions. While we can approximate some cases with devices like -. A. x x = y, in general there is no way to express them in the language of the logic.
A simple symbol like "NF"
indicates this better than the expanded definition, in the same way that
"E." is easier to read than "-. A. -." when reading an expression. On
the other hand, the phrase "not free in" *is* standard, and needs to be
written in the space around such assertions in conventional logic.
Unlike other definitions, it doesn't buy significant space savings.
At least this claim is refutable: there are two occurrences of ph in the
original expression and one in the definition, so if ph is large there
can be significant space savings.
The penalty for the two ph's is small after compression, since they get replaced with the same expression. In most cases "( ph -> A. x ph )" occurs only in the idiom |- ( ph -> A. x ph ) and is never nested, so there is no exponential blowup caused by the two ph's.
We can debate what "significant" means, but I doubt the space savings for set.mm would be even 1%. All hb* theorems, their comments, and their proofs together occupy less than 130KB in set.mm.
To summarize my objections:
1. NF(x,ph) isn't a notation that occurs in the literature, unlike _everything_ else in early set.mm. I put a lot of work into ensuring that every definition is carefully sourced with a literature reference and designed to have exactly the same behavior.
2. NF(x,ph) tries to shove an English language side condition into the mathematical language proper. In standard FOL, "not free in" is a side condition, not a logical predicate that can be manipulated. Side conditions and predicates are two different things, like apples and oranges.
3. NF(x,ph) and the "not free in" side condition are not logically equivalent (assuming it even makes sense to compare apples to oranges). The x=x and similar cases (some not even decidable) may seem minor to you, but to me, precise definitions matching the literature are important.
In principle, the proper way to add "not free in" would be a $nf x ph $. metamath language extension where $d now goes, but of course that can't be implemented in the present Metamath framework nor do we want to complicate the language that way. So I just left the |- ( ph -> A. x ph ) idiom alone instead of pretending it is a side condition when it really isn't. It is a simple idiom and easy to recognize, and there will be no mystery about it once I add the explanatory links I described.
If you really need NF, CondEq, etc. for your $j stuff, they should go in a separate section. But why can't you have the software recognize the patterns |- ( ph -> A. x ph ), |- ( x = y -> ph ), etc. directly? There are likely many more useful patterns, and it would be a lot more flexible than having to add a new, odd wff definition for each new pattern, which is not something that is reader-friendly.
We can debate what "significant" means, but I doubt the space savings for set.mm would be even 1%. All hb* theorems, their comments, and their proofs together occupy less than 130KB in set.mm.You seem to forget that those theorems get uses beyond just other hb* theorems. We aren't deriving those just for fun! The primary consumers of such theorems are in doing alpha substitution which may involve bound scopes. To take a typical example, http://us.metamath.org/mpegif/flfcnp2.html#25. In these cases, we are quite obviously not interested in phi implying forall x phi specifically, and are focusing only on their "idiomatic" use as meaning NF. This is the part I'm really interested in changing. If you want pred calc to stay pure, fine, but I want, *eventually*, that we can use NF when we mean NF. As far as worthwhile definitions go, I'm pretty sure that you will find more instances of NF used in set.mm than, say, "or". And every book I can find on predicate calculus *does* define NF, and calls it "x is not free in ph" used as a side condition.
Hi,
On Thu, Aug 18, 2016 at 05:04:07PM -0400, Norman Megill wrote:
> I think a careful reader could be puzzled when they look up the
> definition of ( x not-free-in ph ) and realize that it doesn't
> really mean "not free in". That reader may then wonder what other
> definitions we are playing fast and loose with and even feel a
> slight discomfort in casually trusting other familiar notation.
I fully agree with this argument. If it looks like a duck, it should
really be as most similar to a duck straight from the literature as
possible. And indeed x is not not-free in x = x.
> As I proposed, we can have a hyperlink with a careful explanation in
> the comment for each use of ph -> A. x ph. I don't think we should
> give it a name, at least not in early set theory, because it isn't
> named in the literature. In early set.mm, everything has a
> literature definition, so essentially all symbols are immediately
> recognizable by someone with some acquaintance with set theory, and
> I have gone out of my way to ensure that.
As a computer science student, I took various courses on formal logic,
but non-freeness was never given a separate symbol and always occurred
as a side-condition.
The start of set.mm has the nice property of only using (ASCII
renderings of) symbols everyone with a minimum background in formal
math seen. Raising non-freeness to a separate symbol would break
this property.
> >If anyone
> >else is reading this, I'd really like to hear your view because this
> >needs community response.
> Yes, I would like to hear from others.
For technical purposes (i.e. writing Igor), I have a slight preference
for keeping ph -> A. x ph; but only because otherwise I'd have to update
code in various places.
But since ph -> A. x ph is not the same as not-free-in, _if_ you decide to
define a separate symbol for it, please don't name it NF. Spontaneous
alternative proposals:
* "SNF" (Semantically non-free)
* "NFE" Non-free in some equivalent
* <] x ph or some other random symbols... The point is to make it
non-alpha, because anything in a formula with only letters is a variable
in the early sections. (c.f. T. / F. )
--
You received this message because you are subscribed to the Google Groups "Metamath" group.
To unsubscribe from this group and stop receiving emails from it, send an email to metamath+unsubscribe@googlegroups.com.
To post to this group, send email to meta...@googlegroups.com.
Visit this group at https://groups.google.com/group/metamath.
For more options, visit https://groups.google.com/d/optout.
On Thu, 25 Aug 2016 12:25:32 -0700, Cris Perdue <cris....@gmail.com> wrote:
> If there is to be such a named predicate, could someone kindly explain to
> me why it would not be more appropriate to give it a name based on the idea
> that the formula ph does Not Depend on the variable x, or that the variable
> x is Not Relevant to formula ph?
>
> E.g.
> NR ( x , ph ) or
> ND ( ph , x ) or perhaps even
> invariant ( ph , x )
I like this.
Maybe there are two steps: Identify the underlying phrase,
then identify its syntax.
1. Possible underlying words: Not relevant, Irrelevant, not depend,
independent, not free, unfree, invariant, ignored.
I don't like "invariant" - that has incompatible meanings in many circles.
I like "Irrelevant", but it's very close to other terms
(Irreflexive, Irrational, irreduceable).
So "Not relevant" is pretty good, let's start there.
2. Next, syntax. The symbol "NR" isn't bad in:
NR ( x , ph )
However, are the parens really helping? This construct is a lot like for-all,
it tells you something about a set variable for a given wff.
I suspect you might be better with this syntax, which is similar to A. and E. :
NR x ph
> Also, I wonder if such a definition might also be usefully extended to
> support concepts such as "the absolute value of x does not depend on the
> sign of x" (with a signum function standing in for "sign"). In other words
> allowing "x" to be a term that is not necessarily a variable. Such a thing
> seems like it could be useful also, though a definition might become a bit
> complex.
I think that'd be overly complex. I think it'd better to have a different
definition for something like that.
On 8/24/16 6:58 PM, Mario Carneiro wrote:On Wed, Aug 24, 2016 at 6:13 PM, Jens-Wolfhard Schicke-Uffmann
<drah...@gmx.de <mailto:drah...@gmx.de>> wrote:
As a computer science student, I took various courses on formal logic,
but non-freeness was never given a separate symbol and always occurred
as a side-condition.
This continues to baffle me, since it is definitely possible to state
that a predicate does not vary with respect to a given parameter as a
formula. The only thing I can think is that there are simpler ways to do
this if one uses the "explicit parameter list" style (which almost all
predicate logics use), by simply omitting the parameter.
The focus of the traditional approach to predicate calculus is to describe the object language and provide a method for working directly with the object language. "Not free" is a condition that can be computed, outside of the logic, to determine if an object-language wff is or is not an axiom. Once the wff qualifies, a single step would be added to the actual object-language proof, since the effort to determine "not free" is not counted.
If we were to replace "not free" with "ph -> A. x ph" in traditional axiom schemes, we would then have a hypothesis that needs to be proved, not just a side condition to be calculated.
Actually, the equality axioms are essential ingredients that make Tarski's and set.mm's systems work, and it isn't clear to me whether we could dispense with "not free in" and/or "free for" in predicate calculus _without_ equality, even with additional axioms.
The start of set.mm <http://set.mm> has the nice property of only
using (ASCII
renderings of) symbols everyone with a minimum background in formal
math seen. Raising non-freeness to a separate symbol would break
this property.
Would moving it out of the early sections resolve this complaint?
NF is a pretty drastic change to the philosophy and presentation of set.mm, especially the early parts that are intended to be friendly for general math/logic audiences without made-up notation they've never seen before. I still have misgivings about whether it would accomplish anything useful (outside of your definitional checker) other than a minor reduction in some proof sizes, with a somewhat heavy price to pay in terms of being unconventional.
I would like to first see NF uses in a mathbox to begin with, say with many of the hb*s reproved with the new notation, so we (I) can get a feel for it. Over time we can decide how far up we feel comfortable moving them, but I think we should keep them out of the early sections at least initially and perhaps permanently. Not sure what the cutoff for "early section" is.
> >If anyone
> >else is reading this, I'd really like to hear your view because this
> >needs community response.
> Yes, I would like to hear from others.
For technical purposes (i.e. writing Igor), I have a slight preference
for keeping ph -> A. x ph; but only because otherwise I'd have to update
code in various places.
This is interesting. As I mentioned, making it easier for verifiers is
exactly one of the reasons I would like to implement NF or an
equivalent. If you were to start from scratch, or if you otherwise did
not have to worry about inertia from the current set.mm <http://set.mm>,
would it be easier or harder to use NF and NF_ instead of ph -> A. x ph?
An issue that hasn't been discussed is the exact definition of NF.
We have to decide whether to use "A. x ( ph -> A. x ph )" or just "( ph -> A. x ph )" for the NF definition. Let me call these "closed NF" and "open NF". Virtually all of our uses have open NF as a hypothesis, but the NF that has been proposed is closed.
Perhaps at some philosophical level, the closed NF version could be considered desirable since x is (effectively) not free in it. But I don't think a need for this property arises very often. I doubt we'd ever need to apply NF to itself, for example. The primary purpose of NF is as a hypothesis emulating not-free-in, and it is almost always used stand-alone, just like the real not-free-in.
The more I think about it, a closed NF definition is starting to seem like the wrong way to do it. Here are 3 reasons for using open NF:
1. An open NF would be easier to retrofit directly, perhaps with some proofs being slightly smaller that with a closed NF since we don't have to invoke ax-gen/a4i to add/delete the outer quantifier. It would also be easier to revert, a consideration (for me at least) if in the future we change our minds.
2. An open NF has the advantage of communicating to the reader, once its definition is expanded, its primary purpose of proving instances of |- ph -> A. x ph (its exact definition). This form always occurs in Tarski's paper as well as nearly all of our uses. The extra quantifier is an unnecessary distraction that may cause the reader to wonder why it is there.
3. Perhaps most important in the long term, the closed NF version is less general. It is always possible to change open NF to closed by prefixing it with A. x, but it is impossible to go the other way. This can be a problem when NF is used as an antecedent. If the theorem can be proved with an open NF and no A. x prefix, this is a much stronger result than the same theorem having a closed NF as the antecedent.
Norm