David

The ascii may not be readable, but it can be converted back to ext, or to utf8:

ⓈHOLCONST
│ sum:ℕ→ℕ
├──
│ ∀n⦁ sum 0 = 0 ∧ sum (n) = n + (sum n-1)
■
ⓈHOLCONST
│ pow:ℕ→ℕ→ℕ
├──
│ ∀b e⦁ (pow b 0) = 1 ∧ (pow b e) = b * (pow b (e - 1))
■
=SML
val ex92 = ⌜λ n r⦁ sum (pow r n) = (1 - (pow r (n - 1)) Div (1 - r))⌝;
val UI = ∀_elim ex92 induction_thm;
val lemma1 = rewrite_rule [] UI;

putting in utf8 would be better, but you probably wouldn't find that easy.
(the next release of ProofPower will make it easier)

To understand why your definitions don't work, consider what they say when you instantiate n or e to 0.
You get conflicting and nonsensical assertions about sum 0 and pow b 0.
When you use similar definitions in SML its OK because execution is sequential and the second reading is never reached (for the zero argument), but in logic you can reach the second clause and you can derive a contradiction.

Also, it is now clear (even though you don't actually state your goal), that you are trying to reason about the sum of a segment of series, but the function "sum" you have (almost) defined gives the sum of an initial segment of the natural numbers, not of an arbitrary series.
The "sum" you want takes a function as well as a number, so it has type:

sum:(ℕ→ℕ) → ℕ → ℕ

When it comes to doing induction, apart from the need to chose the proposition carefully which I mentioned earlier, you obtain the required property by eliminating only the outermost universal, so you would have:

val ex92 = ⌜λ n⦁  ∀r⦁ sum (pow r n) = (1 - (pow r (n - 1)) Div (1 - r))⌝;

Then you would have a term of the right type to instantiate induction thm.

Roger





_______________________________________________
Proofpower mailing list
[email protected]
http://lemma-one.com/mailman/listinfo/proofpower_lemma-one.com

Reply via email to