In an infinite reduction sequence, we can take a step from any n to n + 1.
Any function is a length-0 reduction sequence, containing only f 0.
In a generic reduction sequence reduction_seq r N f,
f m is a reduct of f n, assuming n < m < N + 1.
The start of a reduction sequence is the first element of f, i.e. f 0.
Note that this always holds; a reduction sequence must contain at least one
element; there is no such thing as an empty reduction sequence with no elements.
Equations
- hseq.start = f 0
Instances For
Assuming N is a natural number, i.e. not infinite, hseq.end is the
last element of hseq, i.e. f N.
Equations
- Thesis.reduction_seq.end N hseq = f N
Instances For
Equations
- Thesis.fun_aux N f g n = if n ≤ N then f n else g (n - N)
Instances For
Equations
- ⋯ = ⋯
Instances For
Equations
- ⋯ = ⋯
Instances For
Equations
- ⋯ = ⋯
Instances For
Equations
- Thesis.steps_reversed [] = []
- Thesis.steps_reversed (x_1 :: xs) = Thesis.steps_reversed xs ++ [(x_1.2, x_1.1)]
Instances For
ReductionSeq r x y ss represents a reduction sequence, taking
reduction steps as given in ss from x to y.
An empty reduction sequence is represented by ReductionSeq.refl, allowing a
reduction from x to x in 0 steps. Using ReductionSeq.head, a single step
r a b can be prepended to an existing reduction sequence.
- refl: ∀ {α : Type u_1} {r : Rel α α} {x : α}, Thesis.ReductionSeq r x x []
- head: ∀ {α : Type u_1} {r : Rel α α} {x y z : α} {ss : List (α × α)}, r x y → Thesis.ReductionSeq r y z ss → Thesis.ReductionSeq r x z ((x, y) :: ss)
Instances For
If a is an element of a concatenated sequence, it must be a member of one of
the two subsequences.
A reduction sequence exists iff there is a reflexive-transitive reduction step.
A reflexive-transitive reduction sequence a₀ ->* a₁ ->* ... ->* aₙ can be
'flattened' (by analogy to a nested list) to a regular reduction sequence
a₀ -> ... -> a₁ -> ... -> aₙ which contains all elements of the original
sequence.