Our general plan for doing this is to add a rule that essentially asserts that if

![]() |
But the rule is not sound. From Löb's theorem on proof predicates [7], we suspect that this is not valid. Aitken discusses the situation in his thesis [3]. The idea is this. Given

to conclude
we need a new rule, say
, but this is
not part of
. If we add it, we get a new notion of
,say
. If we allow reflection over these, we get
, etc. Can we close this off? Almost! We can close it
syntactically, but what does it mean? Notice that the extractor which
is needed to build a canonical proof from
depends on this
meaning.
Reflected Pre-Proofs
To get syntactic closure under reflection, we want a rule like
above. Where Proof reps proof with Proof in the rule
itself. To accomplish this, we first parameterize proof to
where Q is the term used in the rule. This forces us
to consider Proof(Q).
Syntactic Closure of Proof Definition
Define
to allow the rule
In the [6] we show how to take a syntactic fixed point through Q.
Here is another approach.
Add to the library a definition
This is straightforward from PreProof since PF is just a term.
The actual rule uses an indexing mechanism to keep track of how deeply
the use of reflection is nested. The function level(p) gives the
maximum of the level numbers occurring in reflection rules of p. Using this we incorporate the
rule in the definition of
as follows.

| is_a_proof |