Built with Alectryon, running Coq+SerAPI v8.16.0+0.16.3. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From Tealeaves Require Import Tactics.Prelude.(* Iterate an endofunction <<n>> times *)(** * Iterating Functions *)(**********************************************************************)Fixpointiterate (n : nat) {A : Type} (f : A -> A) :=
match n with
| 0 => @id A
| S n' => iterate n' f ∘ f
end.(** ** Rewriting Rules *)(**********************************************************************)
forall (A : Type) (f : A -> A), iterate 0 f = id
forall (A : Type) (f : A -> A), iterate 0 f = id
reflexivity.Qed.
forall (n : nat) (A : Type) (f : A -> A),
iterate (S n) f = iterate n f ∘ f
forall (n : nat) (A : Type) (f : A -> A),
iterate (S n) f = iterate n f ∘ f
n: nat A: Type f: A -> A
iterate (S n) f = iterate n f ∘ f
n: nat A: Type f: A -> A
iterate n f ∘ f = iterate n f ∘ f
reflexivity.Qed.
forall (n : nat) (A : Type) (f : A -> A),
iterate (S n) f = f ∘ iterate n f
forall (n : nat) (A : Type) (f : A -> A),
iterate (S n) f = f ∘ iterate n f
n: nat A: Type f: A -> A
iterate (S n) f = f ∘ iterate n f
n: nat A: Type f: A -> A
iterate n f ∘ f = f ∘ iterate n f
A: Type f: A -> A
iterate 0 f ∘ f = f ∘ iterate 0 f
n: nat A: Type f: A -> A IHn: iterate n f ∘ f = f ∘ iterate n f
iterate (S n) f ∘ f = f ∘ iterate (S n) f
A: Type f: A -> A
iterate 0 f ∘ f = f ∘ iterate 0 f
reflexivity.
n: nat A: Type f: A -> A IHn: iterate n f ∘ f = f ∘ iterate n f
iterate (S n) f ∘ f = f ∘ iterate (S n) f
n: nat A: Type f: A -> A IHn: iterate n f ∘ f = f ∘ iterate n f
iterate n f ∘ f ∘ f = f ∘ (iterate n f ∘ f)
n: nat A: Type f: A -> A IHn: iterate n f ∘ f = f ∘ iterate n f
iterate n f ∘ f ∘ f = f ∘ iterate n f ∘ f
n: nat A: Type f: A -> A IHn: iterate n f ∘ f = f ∘ iterate n f
iterate n f ∘ f ∘ f = iterate n f ∘ f ∘ f
reflexivity.Qed.
forall (A : Type) (f : A -> A) (a : A),
iterate 0 f a = a
forall (A : Type) (f : A -> A) (a : A),
iterate 0 f a = a
reflexivity.Qed.
forall (n : nat) (A : Type) (f : A -> A) (a : A),
iterate (S n) f a = iterate n f (f a)
forall (n : nat) (A : Type) (f : A -> A) (a : A),
iterate (S n) f a = iterate n f (f a)
reflexivity.Qed.
forall (n : nat) (A : Type) (f : A -> A) (a : A),
iterate (S n) f a = f (iterate n f a)
forall (n : nat) (A : Type) (f : A -> A) (a : A),
iterate (S n) f a = f (iterate n f a)