A type expression may be used as the conclusion of a sequent, and the sequent is considered true just when there is some "witness" expression, say T"
1. x : ![]()
2. y :![]()
3. x+1<y{z:
| x<z & z<y }
is true because, for example,
1. x : ![]()
2. y :![]()
3. x+1<yy-1
{z:
| x<z & z<y }
While there is a proof rule for providing such a witness explicitly to justify such a sequent, it is common to defer or avoid explicitly supplying such witnesses. For example, one may infer
from x:A
B(x)
, and A
Type
1. x : A B(x)
since we can construct a witness x.b"
A
B"
A"
B"
Thm* x:( List)
{y:
| y greater-bounds x }
The proof proceeds by induction on lists, specifying witnesses explicitly at three key points. It provides
The proof does
not explicitly show a member of List)
{y:
| y greater-bounds x }
There are three lines of further elaboration at this point, and there is some interaction between them.
Proof Witness Extraction is a method for actually extracting a witness from the proof of a type-conclusioned sequent.
Sequents with Restricted Declarations are introduced to allow us to assert the independence of witnesses from certain variables.(1. x : A [not for witness] <sequent>)
Propositional Proof Witness Extraction is extracting from proofs of propositions certain kinds of witnesses inherent in their constructive meaning, this being effected by representingPropositions as Types
About:
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() |