Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.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.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import Spaces.Pos. Require Import Spaces.BinInt.Core. Require Import Spaces.BinInt.Spec. (** ** Iteration of equivalences *) (** *** Iteration by arbitrary integers *) Definition binint_iter {A} (f : A -> A) `{!IsEquiv f} (n : BinInt) : A -> A := match n with | neg n => fun x => pos_iter f^-1 n x | zero => idmap | pos n => fun x => pos_iter f n x end. (** Iteration by arbitrary integers requires the endofunction to be an equivalence, so that we can define a negative iteration by using its inverse. *)
A: Type
f: A -> A
H: IsEquiv f
n: BinInt
a: A

binint_iter f (binint_succ n) a = f (binint_iter f n a)
A: Type
f: A -> A
H: IsEquiv f
n: BinInt
a: A

binint_iter f (binint_succ n) a = f (binint_iter f n a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A
binint_iter f (binint_succ (pos n)) a = f (binint_iter f (pos n) a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
A: Type

forall (n : Pos) (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
A: Type

(fun p : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p)) a = f (binint_iter f (neg p) a)) 1%pos
A: Type
forall p : Pos, (fun p0 : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p0)) a = f (binint_iter f (neg p0) a)) p -> (fun p0 : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p0)) a = f (binint_iter f (neg p0) a)) (pos_succ p)
A: Type

(fun p : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p)) a = f (binint_iter f (neg p) a)) 1%pos
A: Type
f: A -> A
H: IsEquiv f
a: A

binint_iter f (binint_succ (-1)%binint) a = f (binint_iter f (-1)%binint a)
A: Type
f: A -> A
H: IsEquiv f
a: A

f (binint_iter f (-1)%binint a) = binint_iter f (binint_succ (-1)%binint) a
apply eisretr.
A: Type

forall p : Pos, (fun p0 : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p0)) a = f (binint_iter f (neg p0) a)) p -> (fun p0 : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p0)) a = f (binint_iter f (neg p0) a)) (pos_succ p)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
f: A -> A
H: IsEquiv f
a: A

binint_iter f (binint_succ (neg (pos_succ n))) a = f (binint_iter f (neg (pos_succ n)) a)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
f: A -> A
H: IsEquiv f
a: A

binint_succ (neg (pos_succ n)) = ?Goal0
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
f: A -> A
H: IsEquiv f
a: A
binint_iter f ?Goal0 a = f (binint_iter f (neg (pos_succ n)) a)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
f: A -> A
H: IsEquiv f
a: A

binint_succ (binint_pred (neg n)) = ?Goal0
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
f: A -> A
H: IsEquiv f
a: A
binint_iter f ?Goal0 a = f (binint_iter f (neg (pos_succ n)) a)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
f: A -> A
H: IsEquiv f
a: A

binint_iter f (neg n) a = f (binint_iter f (neg (pos_succ n)) a)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
f: A -> A
H: IsEquiv f
a: A

f^-1 (binint_iter f (neg n) a) = binint_iter f (neg (pos_succ n)) a
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = f (binint_iter f (neg n) a)
f: A -> A
H: IsEquiv f
a: A

pos_iter f^-1 (pos_succ n) a = f^-1 (pos_iter f^-1 n a)
srapply pos_iter_succ_l.
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

binint_iter f (binint_succ (pos n)) a = f (binint_iter f (pos n) a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

pos_iter f (n + 1)%pos a = f (pos_iter f n a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

pos_iter f (pos_succ n) a = f (pos_iter f n a)
srapply pos_iter_succ_l. Qed.
A: Type
f: A -> A
H: IsEquiv f
n: BinInt
a: A

binint_iter f (binint_succ n) a = binint_iter f n (f a)
A: Type
f: A -> A
H: IsEquiv f
n: BinInt
a: A

binint_iter f (binint_succ n) a = binint_iter f n (f a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A
binint_iter f (binint_succ (pos n)) a = binint_iter f (pos n) (f a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
A: Type

forall (n : Pos) (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
A: Type

(fun p : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p)) a = binint_iter f (neg p) (f a)) 1%pos
A: Type
forall p : Pos, (fun p0 : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p0)) a = binint_iter f (neg p0) (f a)) p -> (fun p0 : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p0)) a = binint_iter f (neg p0) (f a)) (pos_succ p)
A: Type

(fun p : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p)) a = binint_iter f (neg p) (f a)) 1%pos
A: Type
f: A -> A
H: IsEquiv f
a: A

binint_iter f (binint_succ (-1)%binint) a = binint_iter f (-1)%binint (f a)
A: Type
f: A -> A
H: IsEquiv f
a: A

binint_iter f (-1)%binint (f a) = binint_iter f (binint_succ (-1)%binint) a
apply eissect.
A: Type

forall p : Pos, (fun p0 : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p0)) a = binint_iter f (neg p0) (f a)) p -> (fun p0 : Pos => forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg p0)) a = binint_iter f (neg p0) (f a)) (pos_succ p)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
f: A -> A
H: IsEquiv f
a: A

binint_iter f (binint_succ (neg (pos_succ n))) a = binint_iter f (neg (pos_succ n)) (f a)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
f: A -> A
H: IsEquiv f
a: A

binint_iter f (binint_succ (binint_pred (neg n))) a = binint_iter f (binint_pred (neg n)) (f a)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
f: A -> A
H: IsEquiv f
a: A

binint_succ (binint_pred (neg n)) = ?Goal0
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
f: A -> A
H: IsEquiv f
a: A
binint_iter f ?Goal0 a = binint_iter f (binint_pred (neg n)) (f a)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
f: A -> A
H: IsEquiv f
a: A

binint_iter f (neg n) a = binint_iter f (binint_pred (neg n)) (f a)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
f: A -> A
H: IsEquiv f
a: A

pos_iter f^-1 n a = pos_iter f^-1 (pos_succ n) (f a)
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
f: A -> A
H: IsEquiv f
a: A

pos_iter f^-1 n a = pos_iter f^-1 n (f^-1 (f a))
A: Type
n: Pos
p: forall (f : A -> A) (H : IsEquiv f) (a : A), binint_iter f (binint_succ (neg n)) a = binint_iter f (neg n) (f a)
f: A -> A
H: IsEquiv f
a: A

pos_iter f^-1 n a = pos_iter f^-1 n a
reflexivity.
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

binint_iter f (binint_succ (pos n)) a = binint_iter f (pos n) (f a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

pos_iter f (n + 1)%pos a = pos_iter f n (f a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

pos_iter f (pos_succ n) a = pos_iter f n (f a)
srapply pos_iter_succ_r. Qed.
A: Type
f: A -> A
H: IsEquiv f
n: BinInt
a: A

binint_iter f (binint_pred n) a = f^-1 (binint_iter f n a)
A: Type
f: A -> A
H: IsEquiv f
n: BinInt
a: A

binint_iter f (binint_pred n) a = f^-1 (binint_iter f n a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

binint_iter f (binint_pred (neg n)) a = f^-1 (binint_iter f (neg n) a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A
binint_iter f (binint_pred (pos n)) a = f^-1 (binint_iter f (pos n) a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

binint_iter f (binint_pred (neg n)) a = f^-1 (binint_iter f (neg n) a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

pos_iter f^-1 (pos_succ n) a = f^-1 (pos_iter f^-1 n a)
by rewrite pos_iter_succ_l.
A: Type
f: A -> A
H: IsEquiv f
n: Pos
a: A

binint_iter f (binint_pred (pos n)) a = f^-1 (binint_iter f (pos n) a)
A: Type
f: A -> A
H: IsEquiv f
a: A

forall n : Pos, binint_iter f (binint_pred (pos n)) a = f^-1 (binint_iter f (pos n) a)
A: Type
f: A -> A
H: IsEquiv f
a: A

(fun p : Pos => binint_iter f (binint_pred (pos p)) a = f^-1 (binint_iter f (pos p) a)) 1%pos
A: Type
f: A -> A
H: IsEquiv f
a: A
forall p : Pos, (fun p0 : Pos => binint_iter f (binint_pred (pos p0)) a = f^-1 (binint_iter f (pos p0) a)) p -> (fun p0 : Pos => binint_iter f (binint_pred (pos p0)) a = f^-1 (binint_iter f (pos p0) a)) (pos_succ p)
A: Type
f: A -> A
H: IsEquiv f
a: A

(fun p : Pos => binint_iter f (binint_pred (pos p)) a = f^-1 (binint_iter f (pos p) a)) 1%pos
cbn; symmetry; apply eissect.
A: Type
f: A -> A
H: IsEquiv f
a: A

forall p : Pos, (fun p0 : Pos => binint_iter f (binint_pred (pos p0)) a = f^-1 (binint_iter f (pos p0) a)) p -> (fun p0 : Pos => binint_iter f (binint_pred (pos p0)) a = f^-1 (binint_iter f (pos p0) a)) (pos_succ p)
A: Type
f: A -> A
H: IsEquiv f
a: A
p: Pos
q: binint_iter f (binint_pred (pos p)) a = f^-1 (binint_iter f (pos p) a)

binint_iter f (binint_pred (pos (pos_succ p))) a = f^-1 (binint_iter f (pos (pos_succ p)) a)
A: Type
f: A -> A
H: IsEquiv f
a: A
p: Pos
q: binint_iter f (binint_pred (pos p)) a = f^-1 (binint_iter f (pos p) a)

binint_iter f (binint_pred (pos (p + 1%pos))) a = f^-1 (binint_iter f (pos (p + 1%pos)) a)
A: Type
f: A -> A
H: IsEquiv f
a: A
p: Pos
q: binint_iter f (binint_pred (pos p)) a = f^-1 (binint_iter f (pos p) a)

binint_iter f (binint_pred (binint_succ (pos p))) a = f^-1 (binint_iter f (pos (p + 1%pos)) a)
A: Type
f: A -> A
H: IsEquiv f
a: A
p: Pos
q: binint_iter f (binint_pred (pos p)) a = f^-1 (binint_iter f (pos p) a)

binint_iter f (pos p) a = f^-1 (binint_iter f (pos (p + 1%pos)) a)
A: Type
f: A -> A
H: IsEquiv f
a: A
p: Pos
q: binint_iter f (binint_pred (pos p)) a = f^-1 (binint_iter f (pos p) a)

binint_iter f (pos p) a = f^-1 (binint_iter f (binint_succ (pos p)) a)
A: Type
f: A -> A
H: IsEquiv f
a: A
p: Pos
q: binint_iter f (binint_pred (pos p)) a = f^-1 (binint_iter f (pos p) a)

binint_iter f (pos p) a = f^-1 (f (binint_iter f (pos p) a))
A: Type
f: A -> A
H: IsEquiv f
a: A
p: Pos
q: binint_iter f (binint_pred (pos p)) a = f^-1 (binint_iter f (pos p) a)

f^-1 (f (binint_iter f (pos p) a)) = binint_iter f (pos p) a
apply eissect. Qed.
A: Type
f: A -> A
H: IsEquiv f
n: BinInt
a: A

binint_iter f (binint_pred n) a = binint_iter f n (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: BinInt
a: A

binint_iter f (binint_pred n) a = binint_iter f n (f^-1 a)
A: Type

forall (f : A -> A) (H : IsEquiv f) (n : BinInt) (a : A), binint_iter f (binint_pred n) a = binint_iter f n (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (neg n)) a = binint_iter f (neg n) (f^-1 a)

forall a : A, binint_iter f (binint_pred (neg (pos_succ n))) a = binint_iter f (neg (pos_succ n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
forall a : A, binint_iter f (binint_pred 1%binint) a = binint_iter f 1%binint (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
forall a : A, binint_iter f (binint_pred (pos (pos_succ n))) a = binint_iter f (pos (pos_succ n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (neg n)) a = binint_iter f (neg n) (f^-1 a)

forall a : A, binint_iter f (binint_pred (neg (pos_succ n))) a = binint_iter f (neg (pos_succ n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
forall a : A, binint_iter f (binint_pred (pos (pos_succ n))) a = binint_iter f (pos (pos_succ n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (neg n)) a = binint_iter f (neg n) (f^-1 a)

forall a : A, binint_iter f (binint_pred (neg (n + 1)%pos)) a = binint_iter f (neg (n + 1)%pos) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
forall a : A, binint_iter f (binint_pred (pos (n + 1%pos))) a = binint_iter f (pos (n + 1%pos)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (neg n)) a = binint_iter f (neg n) (f^-1 a)
a: A

binint_iter f (binint_pred (neg (n + 1)%pos)) a = binint_iter f (neg (n + 1)%pos) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
a: A
binint_iter f (binint_pred (pos (n + 1%pos))) a = binint_iter f (pos (n + 1%pos)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (neg n)) a = binint_iter f (neg n) (f^-1 a)
a: A

binint_iter f (binint_pred (binint_pred (neg n))) a = binint_iter f (binint_pred (neg n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
a: A
binint_iter f (binint_pred (pos (n + 1%pos))) a = binint_iter f (pos (n + 1%pos)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (neg n)) a = binint_iter f (neg n) (f^-1 a)
a: A

binint_iter f (binint_pred (binint_pred (neg n))) a = binint_iter f (binint_pred (neg n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
a: A
binint_iter f (binint_pred (binint_succ (pos n))) a = binint_iter f (binint_succ (pos n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (neg n)) a = binint_iter f (neg n) (f^-1 a)
a: A

binint_iter f (neg (pos_succ (pos_succ n))) a = binint_iter f (neg (pos_succ n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
a: A
binint_iter f (binint_pred (binint_succ (pos n))) a = binint_iter f (binint_succ (pos n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
a: A

binint_iter f (binint_pred (binint_succ (pos n))) a = binint_iter f (binint_succ (pos n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
a: A

binint_iter f (pos n) a = binint_iter f (binint_succ (pos n)) (f^-1 a)
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
a: A

binint_iter f (pos n) a = binint_iter f (pos n) (f (f^-1 a))
A: Type
f: A -> A
H: IsEquiv f
n: Pos
nH: forall a : A, binint_iter f (binint_pred (pos n)) a = binint_iter f (pos n) (f^-1 a)
a: A

binint_iter f (pos n) a = binint_iter f (pos n) a
reflexivity. Qed.