lean4-htt/tests/lean/termination_by.lean.expected.out
Wojciech Rozowski 96fcc94acb
feat: add support for lattice-theoretic (co)inductive predicates (#8097)
This PR adds support for inductive and coinductive predicates defined
using lattice theoretic structures on `Prop`. These are syntactically
defined using `greatest_fixpoint` or `least_fixpoint` termination
clauses for recursive `Prop`-valued functions. The functionality relies
on `partial_fixpoint` machinery and requires function definitions to be
monotone. For non-mutually recursive predicates, an appropriate
(co)induction proof principle (given by Park induction) is generated.

Summary of changes:
- `Interal.Order.Basic` now contains `CompleteLattice` class, as well as
version of Knaster-Tarski fixpoint theorem (with an associated Park
induction principle) for the internal use for defining (co)inductive
predicates. `Prop` is shown to have two complete lattice structures (one
given by implication order for defining inductive predicates, and one
given by reverse implication for defining coinductive predicates).
Additionally, proofs that lattices are closed under products and
function spaces are included.
- Partial fixpoint's `EqnInfo` now additionally carries an information
whether something is defined as a lattice-theoretic fixpoint or via
CCPOs.
- When constructing a (co)inductive predicate,`PartialFixpoint/Main`
builds an appropriate lattice structure on the type of the predicate
using product lattice, function space lattice and an appropriate lattice
instance on `Prop`.
- `PartialFixpoint/Eqns` is modified to be able to perform rewrite under
lattice-theoretic fixpoint construction
- `PartialFixpoint/Induction`contains a case split for handling of the
(co)inductive predicates. In the case of lattice-theoretic fixpoints, it
appropriately desugars the Park induction principle.
2025-04-30 15:48:58 +00:00

16 lines
1.3 KiB
Text

termination_by.lean:9:2-9:18: warning: unused `termination_by`, function is not recursive
termination_by.lean:12:2-12:21: warning: unused `decreasing_by`, function is not recursive
termination_by.lean:15:2-16:21: warning: unused termination hints, function is not recursive
termination_by.lean:19:2-19:18: warning: unused `termination_by`, function is partial
termination_by.lean:22:2-22:21: warning: unused `decreasing_by`, function is partial
termination_by.lean:25:2-26:21: warning: unused termination hints, function is partial
termination_by.lean:29:0-29:16: warning: unused `termination_by`, function is unsafe
termination_by.lean:32:2-32:21: warning: unused `decreasing_by`, function is unsafe
termination_by.lean:35:2-36:21: warning: unused termination hints, function is unsafe
termination_by.lean:40:4-40:20: warning: unused `termination_by`, function is not recursive
termination_by.lean:44:4-44:20: warning: unused `termination_by`, function is not recursive
termination_by.lean:54:2-54:18: warning: unused `termination_by`, function is not recursive
termination_by.lean:62:2-62:23: error: incomplete set of termination hints:
This function is mutually recursive with isOdd, which does not have a termination hint.
The present clause is ignored.
Try this: termination_by x1 => x1