From frederikeriksen at get2net.dk  Tue May  2 21:16:56 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Tue May  2 20:16:59 2006
Subject: [Logiweb] No .pdf files & "conditioned definitions"
Message-ID: <4457A218.4030703@get2net.dk>

Hi logiweb@diku.dk,

I have two questions:

#1. When I run the pyk compiler on a certain file with the option 
"level=all", for some reason no .pdf files are generated. Both latex and 
dvipdfm are called, but they return with "result=1". I tried to run pyk 
on a "hello world" file instead, and this gave me no problems. Has 
anyone experienced the same phenomenon?

#2. In math texts you often encounter "conditioned definitions", i.e. 
definitions which only make sense if certain requirements are met. For 
instance, take a look at the following definition:

"Let E be an equivalence relation on a set B, and let b \in B. The 
equivalence class of b modulo E is the set
       (*) [b]_E = {x \in B | xEb}."

(I hope you can read through my quasi-LaTeX notation). The point is that 
the defining equation (*) above only makes sense if 1. E is an 
equivalence relation, 2. b is a member of B.

Is there any way to make such definitions in pyk? I've considered using 
the "endorse" construction, which implements side conditions in proofs, 
but I suspect it's not going to work.

Best Regards
Frederik Eriksen.

From grue at diku.dk  Wed May  3 12:39:20 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Wed May  3 11:39:21 2006
Subject: [Logiweb] No .pdf files & "conditioned definitions"
In-Reply-To: <4457A218.4030703@get2net.dk>
References: <4457A218.4030703@get2net.dk>
Message-ID: <Pine.LNX.4.63.0605031130130.13741@app-2.diku.dk>

Hi Frederik,

> I have two questions:
>
> #1. When I run the pyk compiler on a certain file with the option 
> "level=all", for some reason no .pdf files are generated. Both latex and 
> dvipdfm are called, but they return with "result=1". I tried to run pyk on a 
> "hello world" file instead, and this gave me no problems. Has anyone 
> experienced the same phenomenon?

I suppose you talk about the 'equivalence-relations' page at
http://www.diku.dk/~grue/logiweb/20060417/home/eriksen/
equivalence-relations/fixed/body

When you click 'Pdf' you get a 'Not Found'.

If, instead, you click TeX, then page.log and scroll to the end of that 
text, you find:

! LaTeX Error: File `page.sty' not found.
...
l.19 \makeindex
                ^^M
End of file on the terminal!

So you have probably copied your page from one that defines page.sty
(lines of form 'File page.sty ... End of file'), but then you have 
probably deleted the definition of page.sty but kept the reference to it.

You can see what LaTeX source pyk(1) has tried to translate by clicking 
page.tex instead of page.log.

In some cases it is convenient to correct the error directly in page.tex, 
run latex manually on that file until the error is corrected, then correct 
the error in the original equivlence-relations.pyk file and run pyk 
again.

(I will return to question 2 later)

Cheers,
Klaus
From grue at diku.dk  Wed May  3 15:55:11 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Wed May  3 14:55:13 2006
Subject: [Logiweb] No .pdf files & "conditioned definitions"
In-Reply-To: <4457A218.4030703@get2net.dk>
References: <4457A218.4030703@get2net.dk>
Message-ID: <Pine.LNX.4.61.0605031440120.23638@tyr.diku.dk>

Hi Frederik,

> I have two questions:
>
> #2. In math texts you often encounter "conditioned definitions", i.e. 
> definitions which only make sense if certain requirements are met. For 
> instance, take a look at the following definition:
>
> "Let E be an equivalence relation on a set B, and let b \in B. The 
> equivalence class of b modulo E is the set
> (*) [b]_E = {x \in B | xEb}."
>
> (I hope you can read through my quasi-LaTeX notation). The point is that the 
> defining equation (*) above only makes sense if 1. E is an equivalence 
> relation, 2. b is a member of B.
>
> Is there any way to make such definitions in pyk? I've considered using the 
> "endorse" construction, which implements side conditions in proofs, but I 
> suspect it's not going to work.

The right thing to do is to define [b]_E = {x \in B | xEb} and to tell the 
reader that the definition only makes sense when E is an equivalence
relation and b is a member of B.

As a similar example, consider how Mendelson defines division. We all 
agree that x/y does not make sense when y is zero. But the theorem in 
Mendelson Section 2.9 which allows to define new function letters 
*requires* x/y to be defined for all x and y. So one typically defines 
x/0 to be 0 (c.f. Mendelson Section 3.3, the footnote to the proof of 
Proposition 3.16(o)).

When you prove something about [b]_E, you should assume that E is an
equivalence relation and b is a member of B in the formulation of 
the lemma.

-Klaus
From frederikeriksen at get2net.dk  Fri May  5 23:02:54 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Fri May  5 22:02:54 2006
Subject: [Logiweb] "Repetition" & Macro definitions & Error message
Message-ID: <445BAF6E.3080407@get2net.dk>

Hi logiweb@diku.dk,

I have three questions:

1. I'm currently working with an axiomatic system which looks a lot like 
system S from Klaus Grue's ijcar-article 
(http://www.diku.dk/~grue/logiweb/20060417/home/grue/ijcar). The only 
difference is that I've replaced the axiom called Neg with axiom A3 from 
Mendelson. In the article, Klaus proves the lemma "Repetition" (i.e. A 
|- A) using a low-level hack which I haven't quite understood (as yet). 
Is there another, more neat way to prove "Repetition"?

2. Suppose you have macro defined "A ^ B" as "~(A => ~B)". When you're 
writing a proof of, say, the lemma (A ^B |- A), you may want to write a 
proof line saying "A ^ B really means ~(A=>~B)" in order to make things 
clearer for the human reader. Is there a way to do this?

3. In one of my proofs I get the error message "Metageneralization over 
metavariable that occurs free in some premise". What does this mean? 
(I've made the faulty page accessible on "user eriksen"s home page under 
the name of "frozen").

Best Regards
Frederik Eriksen.

From grue at diku.dk  Sat May  6 22:28:59 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Sat May  6 21:29:01 2006
Subject: [Logiweb] "Repetition" & Macro definitions & Error message
In-Reply-To: <445BAF6E.3080407@get2net.dk>
References: <445BAF6E.3080407@get2net.dk>
Message-ID: <Pine.LNX.4.61.0605062043520.4357@tyr.diku.dk>

Hi Frederik

> 1. I'm currently working with an axiomatic system which looks a lot like 
> system S from Klaus Grue's ijcar-article 
> (http://www.diku.dk/~grue/logiweb/20060417/home/grue/ijcar). The only 
> difference is that I've replaced the axiom called Neg with axiom A3 from 
> Mendelson. In the article, Klaus proves the lemma "Repetition" (i.e. A 
>> - A) using a low-level hack which I haven't quite understood (as yet). 
> Is there another, more neat way to prove "Repetition"?

I don't know of a neat way if neat means 'expressed the usual way'. 
The proof I give uses the raw sequent operators. A^I is the identitity 
sequent operator applied to A which yields A|-A. The Pi operator expresses 
meta-generalization and changes A|-A to Pi A:A|-A which is the repetition 
lemma.

> 2. Suppose you have macro defined "A ^ B" as "~(A => ~B)". When you're 
> writing a proof of, say, the lemma (A ^B |- A), you may want to write a proof 
> line saying "A ^ B really means ~(A=>~B)" in order to make things clearer for 
> the human reader. Is there a way to do this?

Yes. Use repetition! As an example:

L01: Premise >> A ^ B;
L02: Repetition |> L01 >> ~(A=>~B);
...

Proofs are checked *after* macro expansion, and after macro expansion, L01 
and L02 above are identical, so the latter follows from the former by 
repetition.

> 3. In one of my proofs I get the error message "Metageneralization over 
> metavariable that occurs free in some premise". What does this mean? (I've 
> made the faulty page accessible on "user eriksen"s home page under the name 
> of "frozen").

The lemma and proof read:

Lemma Technicality: Pi A,B: A => B |- ~ ~ A => B

Proof of Techincality:
L01: Arbitrary >> A,B;
L02: Premise >> A => B;
L03: Block >> Begin;
L04: Arbitrary >> A,B;
L05: Premise >> ~ ~ A;
L06: RemoveDoubleNeg |> L05 >> A;
L07: MP |> L02 |> L06 >> B;
L08: Block >> End;
L09: Ded |> L08 >> ~ ~ A => B

The problem is in L04. 'Arbitrary A,B' is a meta-generalization over A and 
B. But A and B occur free in the premise in L02. That is what the system 
complains about.

At the semantic level, the proof says:

L01: Let A and B be arbitrary terms;
L02: Assume A => B;
L04: Now let A and B be two arbitrary terms that have no connection with 
the ones called A and B in L01;
L05: Assume ~ ~ A;
L06: Remove double negation: A;
L07: From L02 and L06 we have B;

At the semantic level it would be more reasonable to say that the error 
is in line L07 where A => B from L02 is combined with A from L06 even 
though the two A's are unrelated.

Finally, how to correct the proof? Try removing L04! Then the A in L05-L07 
is the same as the one in L01-L02. And similarly for B. I hope it works. 
Otherwise I have to correct Ded.

-Klaus
From grue at diku.dk  Tue May  9 11:02:25 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Tue May  9 10:02:26 2006
Subject: [Logiweb] Pyk cannot :
Message-ID: <Pine.LNX.4.61.0605090959430.30512@tyr.diku.dk>

Hi logiweb@diku.dk

Do not use ':' in pyk definitions.

The ':' character has some old semantics, which is not used anymore, but 
the associated code still exists in the pyk compiler. That will be 
bugfixed later.

Klaus
From frederikeriksen at get2net.dk  Tue May  9 18:37:53 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Tue May  9 17:37:56 2006
Subject: [Logiweb] sub * is * where * is * end sub
Message-ID: <4460B751.1090108@get2net.dk>

Hi logiweb@diku.dk,

I'm trying to a understand the "sub * is * where * is * end sub" 
construct. Why does pyk complain about the following test? (For more 
details, see the eriksen/frozen page).

"[ math test sub       object g equal object g
is                            object d equal object d
where object d is
          object g
end sub
end test
end math  ]"

Best Regards
Frederik Eriksen.

From grue at diku.dk  Wed May 10 09:10:47 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Wed May 10 08:10:49 2006
Subject: [Logiweb] sub * is * where * is * end sub
In-Reply-To: <4460B751.1090108@get2net.dk>
References: <4460B751.1090108@get2net.dk>
Message-ID: <Pine.LNX.4.61.0605100801100.5190@tyr.diku.dk>

Hi Frederik,

> I'm trying to a understand the "sub * is * where * is * end sub" construct. 
> Why does pyk complain about the following test? (For more details, see the 
> eriksen/frozen page).
>
> "[ math test sub       object g equal object g
> is                            object d equal object d
> where object d is
>         object g
> end sub
> end test
> end math  ]"

The "sub ... end sub" is value defined (not macro defined). So evaluation 
of "sub ... end sub" leads to evaluation of the parameters.

"object g" has no value definition, so it evaluates to T by default.
"object g equal object g" also evaluates to T. T is not a parse tree, so 
"sub ... end sub" complains (i.e. returns F).

Solution: put "quote ... end quote" around the parameters: "[ math test 
sub quote object g equal object g end quote is quote ... ]".

Cheers,
Klaus
From frederikeriksen at get2net.dk  Thu May 11 17:28:01 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Thu May 11 16:28:01 2006
Subject: [Logiweb] Re: sub * is * where * is * end sub
In-Reply-To: <Pine.LNX.4.61.0605100801100.5190@tyr.diku.dk>
References: <4460B751.1090108@get2net.dk>
	<Pine.LNX.4.61.0605100801100.5190@tyr.diku.dk>
Message-ID: <446349F1.5000202@get2net.dk>

Klaus Ebbe Grue wrote:

> The "sub ... end sub" is value defined (not macro defined). So 
> evaluation of "sub ... end sub" leads to evaluation of the parameters.
>
> "object g" has no value definition, so it evaluates to T by default.
> "object g equal object g" also evaluates to T. T is not a parse tree, 
> so "sub ... end sub" complains (i.e. returns F).
>
> Solution: put "quote ... end quote" around the parameters: "[ math 
> test sub quote object g equal object g end quote is quote ... ]".
>
> Cheers,
> Klaus
>
Hello once more,

OK, I understand the need for quoting the parameters. But why don't you 
need quotes when using 'sub * is * where * is * end sub' in side 
conditions? I'm thinking about the following definition of the principle 
of mathematical induction (from the "check" page):

"[ math in theory system s rule axiom s nine says for all terms meta x 
comma meta a comma meta b comma meta c indeed
sub meta b is meta a where meta x is zero end sub endorse
sub meta c is meta a where meta x is meta x suc end sub endorse
 meta b infer
 meta a imply meta c infer
 meta a end rule end math ]"

Best Regards
Frederik.

From frederikeriksen at get2net.dk  Sat May 13 16:58:29 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Sat May 13 15:58:26 2006
Subject: [Logiweb] Removing object quantifiers
Message-ID: <4465E605.1070305@get2net.dk>

Hi logiweb@diku.dk,

I've tried to prove the following lemma, using system S from Klaus's 
"check" page:

Lemma Tester: Pi V : (FORALL V. V=V) => V=V

'V' is a meta variable ('meta v') and  'FORALL'  is the object 
quantifier from the "check" page ('for all * indeed *'). I'm using  
Repetition and the Ded-rule in the proof, but it's not working. Any 
suggestions? (For more details about my proof, see the very bottom of 
the "eriksen/frozen" page).

Best Regards
Frederik.

From frederikeriksen at get2net.dk  Sun May 14 14:17:43 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Sun May 14 15:14:16 2006
Subject: [Logiweb] More about "sub ... end sub"
In-Reply-To: <Pine.LNX.4.61.0605100801100.5190@tyr.diku.dk>
References: <4460B751.1090108@get2net.dk>
	<Pine.LNX.4.61.0605100801100.5190@tyr.diku.dk>
Message-ID: <446711D7.6030206@get2net.dk>

Frederik Eriksen wrote:

>> I'm trying to a understand the "sub * is * where * is * end sub" 
>> construct. Why does pyk complain about the following test? (For more 
>> details, see the eriksen/frozen page).
>>
>> "[ math test sub       object g equal object g
>> is                            object d equal object d
>> where object d is
>>         object g
>> end sub
>> end test
>> end math  ]"
>
Klaus Ebbe Grue wrote:

> The "sub ... end sub" is value defined (not macro defined). So 
> evaluation of "sub ... end sub" leads to evaluation of the parameters.
>
> "object g" has no value definition, so it evaluates to T by default.
> "object g equal object g" also evaluates to T. T is not a parse tree, 
> so "sub ... end sub" complains (i.e. returns F).
>
> Solution: put "quote ... end quote" around the parameters: "[ math 
> test sub quote object g equal object g end quote is quote ... ]".
>
Hi once more,

Putting quotes around the parameters didn't work. According to the 
definition of "sub ... end sub" on the "check" page, the first thing 
"sub ... end sub" does is to put quotes around its parameters. So I 
don't think the problem has anything to do with quotes.

What did work was adding the words "apply check" to the test, like this:

"[ math test sub object g equal object g
is                     object d equal object d
where object d is
          object g  
end sub apply check
end test
end math  ]"

I think the explanation is something like this: In reality, the "sub ... 
end sub" construct is a lamda function which must be applied to an 
argument to get off the ground. Writing "sub ... end sub apply check" 
applies "sub ... end sub" to the argument "check". The function doesn't 
use the argument for anything, so any construct will do in place of "check".

Best Regards
Frederik Eriksen.
From grue at diku.dk  Tue May 16 11:04:48 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Tue May 16 10:04:50 2006
Subject: [Logiweb] More about "sub ... end sub"
In-Reply-To: <446711D7.6030206@get2net.dk>
References: <4460B751.1090108@get2net.dk>
	<Pine.LNX.4.61.0605100801100.5190@tyr.diku.dk>
	<446711D7.6030206@get2net.dk>
Message-ID: <Pine.LNX.4.61.0605160956340.27367@tyr.diku.dk>

Hi Frederik,

> Putting quotes around the parameters didn't work...
>
> What did work was adding the words "apply check" to the test, like this:
>
> "[ math test sub object g equal object g
> is                     object d equal object d
> where object d is
>         object g  end sub apply check
> end test
> end math  ]"

Sorry. I didn't realise you used 'sub ... end sub' outside a proof.

All side conditions in proofs are applied to the value of the page symbol 
of the page. Most side conditions discard the value.

Some side conditions do use the value of the page symbol. As an example, a 
rule that says that all definitions are axioms needs the value of the page 
symbol to see what definitions are available. As an example, such a rule 
would allow to define e.g. f(x)=2*x+1 and then use f(x)=2*x+1 as an axiom.

When using side conditions in tests you are right that you need to apply 
them to the page symbol (or to e.g. T if you know that the side condition 
does not use the page symbol).

Cheers,
Klaus
From grue at diku.dk  Tue May 16 11:52:08 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Tue May 16 10:52:10 2006
Subject: [Logiweb] Removing object quantifiers
In-Reply-To: <4465E605.1070305@get2net.dk>
References: <4465E605.1070305@get2net.dk>
Message-ID: <Pine.LNX.4.61.0605161039460.30242@tyr.diku.dk>

Hi Frederik,

> I've tried to prove the following lemma, using system S from Klaus's "check" 
> page:
>
> Lemma Tester: Pi V : (FORALL V. V=V) => V=V
>
> 'V' is a meta variable ('meta v') and  'FORALL'  is the object quantifier 
> from the "check" page ('for all * indeed *'). I'm using  Repetition and the 
> Ded-rule in the proof, but it's not working. Any suggestions? (For more 
> details about my proof, see the very bottom of the "eriksen/frozen" page).

One problem is that V in "(FORALL V. V=V) => V=V" can denote *any* term. 
One would expect the lemma to hold only when V denotes an object variable 
(which would require a side condition on V).

But one thing that works is:

Lemma Test: Pi V : (FORALL v. v=v) => V=V

Proof:
L01: Arbitrary >> V;
L02: Block >> Begin;
L03: Premise >> v=v;
L04: Repetition |> L03 >> v=v;
L05: Block >> End;
L06: Ded |> L05 >> (FORALL v. v=v) => V=V

Above, v is the object variable 'object v' whereas V is the meta variable 
'meta v'. I hope you can do with that lemma. The benefit of the lemma is 
that it is easy to prove. A drawback is that it fixes the object variable 
in the premise. For a page with the lemma and proof above see
http://www.diku.dk/~grue/logiweb/20060417/home/grue/eriksen

The deduction rule puts a FORALL on all object variables in premisses and 
allows arbitrary instantiation of object variables in the conclusion (as 
long as intantiation does not lead to variable clashes).

Cheers,
Klaus
From frederikeriksen at get2net.dk  Wed May 17 11:18:46 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Wed May 17 10:18:50 2006
Subject: [Logiweb] Space concerns
Message-ID: <446ADC66.6040200@get2net.dk>

Hi logiweb@diku.dk,

How much space is available for the 
"/vol/www/hjemmesider/ansatte/grue/logiweb/20060417/home" directory? I'm 
asking because I've gotten the error message:

No space left on device

a couple of times. Erasing some of my superfluous pages works, but this 
is hardly a long-term solution.

Best Regards
Frederik Eriksen.
From grue at diku.dk  Wed May 17 13:01:37 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Wed May 17 12:01:39 2006
Subject: [Logiweb] Space concerns
In-Reply-To: <446ADC66.6040200@get2net.dk>
References: <446ADC66.6040200@get2net.dk>
Message-ID: <Pine.LNX.4.61.0605171151280.1080@tyr.diku.dk>

> How much space is available for the 
> "/vol/www/hjemmesider/ansatte/grue/logiweb/20060417/home" directory? I'm 
> asking because I've gotten the error message:
>
> No space left on device

If you do:

tyr> cd /vol/www/hjemmesider/ansatte/grue/logiweb
tyr> df .
Filesystem           1K-blocks      Used Available Use% Mounted on
info:/net/info/vol/www/disk05
                        6291456   6247344     41864 100%

you will see that this is not only *your* problem but everyones problem. 
The disk is full.

If you then do

tyr> du -s
199456  .

you will see that we (logiweb) use 199456k out of 6291456k, i.e. 3% of the 
disk. So we cannot solve the problem alone. I will contact staff.

Klaus
From frederikeriksen at get2net.dk  Mon May 22 23:27:14 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Mon May 22 22:27:19 2006
Subject: [Logiweb] Rule C
Message-ID: <44721EA2.10401@get2net.dk>

Hi logiweb@diku.dk,

I'm working with an axiomatic system which is based upon system S from 
the "check" page. I've come accross the following problem:

Sometimes in a proof, you want to infer e.g. 'a=a' from Ex.x=x, where 
'E' is the existential quantifier, and 'a' is a fresh variable. In 
section 2.6 of Mendelson, he introduces a so-called "rule C" to 
accomodate this need. He also gives an example of how you can get by 
without rule C, but this seems to be a very cumbersome task indeed. How 
do you deal with inferences like the above in system S?

Best Regards
Frederik Eriksen.


From grue at diku.dk  Tue May 23 09:31:02 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Tue May 23 08:31:04 2006
Subject: [Logiweb] Rule C
In-Reply-To: <44721EA2.10401@get2net.dk>
References: <44721EA2.10401@get2net.dk>
Message-ID: <Pine.LNX.4.61.0605230801520.25116@tyr.diku.dk>

Hi Frederik,

> I'm working with an axiomatic system which is based upon system S from the 
> "check" page. I've come accross the following problem:
>
> Sometimes in a proof, you want to infer e.g. 'a=a' from Ex.x=x, where 'E' is 
> the existential quantifier, and 'a' is a fresh variable. In section 2.6 of 
> Mendelson, he introduces a so-called "rule C" to accomodate this need. He 
> also gives an example of how you can get by without rule C, but this seems to 
> be a very cumbersome task indeed. How do you deal with inferences like the 
> above in system S?

Yes, it is cumbersome. But no more cumbersome than Deduction. Actually, it 
is the same algorithm, so there is no need to program something new. 
Mendelson, page 81, Section 2.6: "RULE C" considers the following example:

L Lemma A: Ex:((B(x) => C(x)) |- Ax:B(x) |- Ex:C(x)

L proof of A:
L01: Premisse >>           Ex: (B(x) => C(x)) ;
L02: Premisse >>           Ax: B(x) ;
L03: Rule C >>             B(b) => C(b) ; (for some b)
L04: Rule A4 |> L02 >>     B(b) ;
L05: MP |> L03 |> L04 >>   C(b) ;
L06: Rule E4 |> L05 >>     Ex: C(x)

A translation of the proof above using deduction reads:

L proof of A:
L01: Premisse >>           Ex: (B(x) => C(x)) ;
L02: Premisse >>           Ax: B(x) ;
L99: Block >>              Begin ;
L03: Premisse >>             B(y) => C(y) ;
L04: Rule A4 |> L02 >>       B(y) ;
L05: MP |> L03 |> L04 >>     C(y) ;
L06: Rule E4 |> L05 >>       Ex: C(x) ;
L07: Block >>              End ;
L08: Ded |> L07 >>         (B(y) => C(y)) => Ex: C(x);
L09: B |> L01 |> L08 >>    Ex: C(x)

To make the translation work, we need an auxiliary lemma:

L lemma B: x#H ||- Ex: G(x) |- G(x) => H |- H

Above, x#H says that x does not occur free in H.

L proof of B:
L01: Premisse >>           Ex:G(x) ;
L02: Premisse >>           G(x) => H ;
L03: Gen |> L02 >>         Ax:(G(x) => H) ;
L04: Tautology |> 2.32d >> Ex:G(x) => H ;
L05: MP |> L04 |> L01 >>   H

And how do we prove 2.32d in Mendelson? That is one of Mendelsons
exercises :-)

But I will take a look at 2.32d later.

-Klaus
From frederikeriksen at get2net.dk  Wed May 24 12:58:32 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Wed May 24 11:58:36 2006
Subject: [Logiweb] Side conditions
Message-ID: <44742E48.7070406@get2net.dk>

Hi logiweb@diku.dk,

Suppose you've proven a lemma called "Lemma A" which has the form

SIDECOND-1 |= SIDECOND-2 |= (whatever Lemma A states)

where SIDECOND-1 and -2 are two side conditions. Suppose further that 
you want to use Lemma A to prove a lemma called "Lemma B". The side 
condition SIDECOND-1 happens to be necessarily true in the context of 
Lemma B; however, SIDECOND-2 is not necessarily true. Is there any way 
to prove

SIDECOND-2 |= (whatever Lemma B states)   ,

or will you have to make do with the weaker claim

SIDECOND-1 |= SIDECOND-2 |= (whatever Lemma B states) ?

Best Regards
Frederik Eriksen.

From grue at diku.dk  Wed May 24 13:49:25 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Wed May 24 12:49:26 2006
Subject: [Logiweb] Side conditions
In-Reply-To: <44742E48.7070406@get2net.dk>
References: <44742E48.7070406@get2net.dk>
Message-ID: <Pine.LNX.4.61.0605241223550.27047@tyr.diku.dk>

Hi Frederik

> Suppose you've proven a lemma called "Lemma A" which has the form
>
> SIDECOND-1 |= SIDECOND-2 |= (whatever Lemma A states)
>
> where SIDECOND-1 and -2 are two side conditions. Suppose further that you 
> want to use Lemma A to prove a lemma called "Lemma B". The side condition 
> SIDECOND-1 happens to be necessarily true in the context of Lemma B; however, 
> SIDECOND-2 is not necessarily true. Is there any way to prove
>
> SIDECOND-2 |= (whatever Lemma B states)   ,
>
> or will you have to make do with the weaker claim
>
> SIDECOND-1 |= SIDECOND-2 |= (whatever Lemma B states) ?

It is indeed possible in the underlying 'Logiweb sequent calculus'.

The problem is to figure out how to write the proof using 'medium level 
proofs' (base page, Section 6.8.2). Maybe the following works:

---

X lemma Lemma A': SIDECOND-2 |= SIDECOND-1 |= (whatever Lemma A states)

X proof of Lemma A':
L01: Side-condition >> SIDECOND-2 ;
L02: Side-condition >> SIDECOND-1 ;
L03: Lemma A modus probans L02 modus probans L01 >> (what Lemma A states)

X proof of Lemma B:
L01: Side-condition >> SIDECOND-2
...
L17: Lemma A' modus probans L01 >> (whatever Lemma A states)
...

---

The trick is to swap the side conditions so that the modus probans in line 
L17 in the proof of Lemma B connects the side condition from line L01 with 
the right side condition in Lemma A, c.f. line 5 of the definition of 
conclude_3 in Section 6.8.6 of the base page which says that
   (x |= y) modus probans z
gives rise to unification of x and z whereas
   (x |= y) applied to anything but modus probans
gives rise to evaluation of x.

If my suggestion does not work, try putting the page on Logiweb and post 
its reference.

-Klaus
From frederikeriksen at get2net.dk  Wed May 24 20:44:26 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Wed May 24 19:44:30 2006
Subject: Re-2: [Logiweb] Side conditions
In-Reply-To: <Pine.LNX.4.61.0605241223550.27047@tyr.diku.dk>
References: <44742E48.7070406@get2net.dk>
	<Pine.LNX.4.61.0605241223550.27047@tyr.diku.dk>
Message-ID: <44749B7A.8020509@get2net.dk>

Klaus Ebbe Grue wrote:

>> Suppose you've proven a lemma called "Lemma A" which has the form
>>
>> SIDECOND-1 |= SIDECOND-2 |= (whatever Lemma A states)
>>
>> where SIDECOND-1 and -2 are two side conditions. Suppose further that 
>> you want to use Lemma A to prove a lemma called "Lemma B". The side 
>> condition SIDECOND-1 happens to be necessarily true in the context of 
>> Lemma B; however, SIDECOND-2 is not necessarily true. Is there any 
>> way to prove
>>
>> SIDECOND-2 |= (whatever Lemma B states)   ,
>>
>> or will you have to make do with the weaker claim
>>
>> SIDECOND-1 |= SIDECOND-2 |= (whatever Lemma B states) ?
>
>
> It is indeed possible in the underlying 'Logiweb sequent calculus'.
>
> The problem is to figure out how to write the proof using 'medium 
> level proofs' (base page, Section 6.8.2). Maybe the following works:
>
> ---
>
> X lemma Lemma A': SIDECOND-2 |= SIDECOND-1 |= (whatever Lemma A states)
>
> X proof of Lemma A':
> L01: Side-condition >> SIDECOND-2 ;
> L02: Side-condition >> SIDECOND-1 ;
> L03: Lemma A modus probans L02 modus probans L01 >> (what Lemma A states)
>
> X proof of Lemma B:
> L01: Side-condition >> SIDECOND-2
> ...
> L17: Lemma A' modus probans L01 >> (whatever Lemma A states)
> ...
>
> ---
>
> The trick is to swap the side conditions so that the modus probans in 
> line L17 in the proof of Lemma B connects the side condition from line 
> L01 with the right side condition in Lemma A, c.f. line 5 of the 
> definition of conclude_3 in Section 6.8.6 of the base page which says 
> that
>   (x |= y) modus probans z
> gives rise to unification of x and z whereas
>   (x |= y) applied to anything but modus probans
> gives rise to evaluation of x.
>
Hi Klaus,

It worked! Thanks for the tip.

Best Regards
Frederik.

From frederikeriksen at get2net.dk  Thu May 25 12:12:45 2006
From: frederikeriksen at get2net.dk (Frederik Eriksen)
Date: Thu May 25 11:12:48 2006
Subject: [Logiweb] Meta-variables in side conditions
Message-ID: <4475750D.6040800@get2net.dk>

Hi logiweb@diku.dk

Suppose you have a lemma in which a meta-variable 'X' appears in a 
side-condition, but not anywhere else in the lemma. When using the 
lemma, is it necessary to tell the proof checker explicitly how to 
instantiate X? (I know it was necessary last year, but things might have 
changed in the meantime).

Best Regards
Frederik Eriksen.

From grue at diku.dk  Fri May 26 10:51:10 2006
From: grue at diku.dk (Klaus Ebbe Grue)
Date: Fri May 26 09:51:11 2006
Subject: [Logiweb] Meta-variables in side conditions
In-Reply-To: <4475750D.6040800@get2net.dk>
References: <4475750D.6040800@get2net.dk>
Message-ID: <Pine.LNX.4.61.0605260939410.5630@tyr.diku.dk>

Hi Frederik,

> Suppose you have a lemma in which a meta-variable 'X' appears in a 
> side-condition, but not anywhere else in the lemma. When using the lemma, is 
> it necessary to tell the proof checker explicitly how to instantiate X? (I 
> know it was necessary last year, but things might have changed in the 
> meantime).

Last year, uninstantated meta-variables were reported as errors.

Now, uninstantiated meta-variables are left uninstantiated.

The change from the old to the new style allows to formulate the deduction
rule. That rule was impossible to formulate in the old style.

But the change from old to new style creates a new problem: Formerly, the 
implementation of side conditions could assume that they would never 
encounter a meta-variable. Now they must be prepared for that. And maybe 
some errors lurk in the code of some of the old side conditions, ready to 
strike if they see a meta-variable :-(

I cannot guarantee that I have managed to correct all places from the old 
to the new style, but try your proof without instantiating meta-variables. 
If you get a unification error or an error saying that the meta-variable 
is not instantiated, please e-mail me a reference to the page. Also e-mail 
me if a side-condition acts silly when applied to terms that contain 
meta-variables.

Cheers,
Klaus
