A fixpoint combinator that allows for deferred proofs of termination.
extrinsicFix R F is function implemented as the loop
extrinsicFix R F a = F a (fun a _ => extrinsicFix R F a).
If the loop can be shown to be well-founded, extrinsicFix_eq_apply proves that it satisfies the
fixpoint equation. Otherwise, extrinsicFix R F is opaque, i.e., it is impossible to prove
nontrivial properties about it.
Equations
- WellFounded.extrinsicFix R F a = if h : WellFounded R then h.fix F a else WellFounded.opaqueFix✝ R F a
Instances For
A fixpoint combinator that allows for deferred proofs of termination.
extrinsicFix₂ R F is function implemented as the loop
extrinsicFix₂ R F a b = F a b (fun a' b' _ => extrinsicFix₂ R F a' b').
If the loop can be shown to be well-founded, extrinsicFix₂_eq_apply proves that it satisfies the
fixpoint equation. Otherwise, extrinsicFix₂ R F is opaque, i.e., it is impossible to prove
nontrivial properties about it.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The function implemented as the loop
opaqueFix₃ R F a b c = F a b c (fun a' b' c' _ => opaqueFix₃ R F a' b' c').
opaqueFix₃ R F is the fixpoint of the functional F, as long as the loop is
well-founded.
The loop might run forever depending on F. It is opaque, i.e., it is impossible to prove
nontrivial properties about it.
A fixpoint combinator that allows for deferred proofs of termination.
extrinsicFix₃ R F is function implemented as the loop
extrinsicFix₃ R F a b c = F a b c (fun a b c _ => extrinsicFix₃ R F a b c).
If the loop can be shown to be well-founded, extrinsicFix₃_eq_apply proves that it satisfies the
fixpoint equation. Otherwise, extrinsicFix₃ R F is opaque, i.e., it is impossible to prove
nontrivial properties about it.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A fixpoint combinator that can be used to construct recursive functions with an extrinsic, partial proof of termination.
Given a relation R and a fixpoint functional F which must be decreasing with respect
to R, partialExtrinsicFix R F is the recursive function obtained by having F call
itself recursively.
For each input a, partialExtrinsicFix R F a can be verified given a partial termination
proof. The precise semantics are as follows.
If Acc R a does not hold, partialExtrinsicFix R F a might run forever. In this case,
nothing interesting can be proved about the recursive function; it is opaque and behaves like a
recursive function with the partial modifier.
If Acc R a does hold, partialExtrinsicFix R F a is equivalent to
F a (fun a' _ => partialExtrinsicFix R F a'), both logically and regarding its termination behavior.
In particular, if R is well-founded, partialExtrinsicFix R F a is equivalent to
WellFounded.fix _ F.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A 2-ary fixpoint combinator that can be used to construct recursive functions with an extrinsic, partial proof of termination.
Given a relation R and a fixpoint functional F which must be decreasing with respect
to R, partialExtrinsicFix₂ R F is the recursive function obtained by having F call
itself recursively.
For each pair of inputs a and b, partialExtrinsicFix₂ R F a b can be verified
given a partial termination proof. The precise semantics are as follows.
If Acc R ⟨a, b⟩ does not hold, partialExtrinsicFix₂ R F a b might run forever. In this
case, nothing interesting can be proved about the recursive function; it is opaque and behaves like
a recursive function with the partial modifier.
If Acc R ⟨a, b⟩ does hold, partialExtrinsicFix₂ R F a b is equivalent to
F a b (fun a' b' _ => partialExtrinsicFix₂ R F a' b'), both logically and regarding its
termination behavior.
In particular, if R is well-founded, partialExtrinsicFix₂ R F a b is equivalent to
a well-foundesd fixpoint.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A 3-ary fixpoint combinator that can be used to construct recursive functions with an extrinsic, partial proof of termination.
Given a relation R and a fixpoint functional F which must be decreasing with respect
to R, partialExtrinsicFix₃ R F is the recursive function obtained by having F call
itself recursively.
For each pair of inputs a, b and c, partialExtrinsicFix₃ R F a b can be
verified given a partial termination proof. The precise semantics are as follows.
If Acc R ⟨a, b, c⟩ does not hold, partialExtrinsicFix₃ R F a b might run forever. In this
case, nothing interesting can be proved about the recursive function; it is opaque and behaves like
a recursive function with the partial modifier.
If Acc R ⟨a, b, c⟩ does hold, partialExtrinsicFix₃ R F a b is equivalent to
F a b c (fun a' b' c' _ => partialExtrinsicFix₃ R F a' b' c'), both logically and regarding its
termination behavior.
In particular, if R is well-founded, partialExtrinsicFix₃ R F a b c is equivalent to
a well-foundesd fixpoint.
Equations
- One or more equations did not get rendered due to their size.