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]
forallp : Pos,
(fun_ : Pos => x = x) p ->
(fun_ : Pos => x = x) (pos_succ p)
A: Type x: A p: x = x
(fun_ : Pos => x = x) 1%pos
exact p.
A: Type x: A p: x = x
forallp : Pos,
(fun_ : Pos => x = x) p ->
(fun_ : Pos => x = x) (pos_succ p)
A: Type x: A p: x = x n: Pos q: (fun_ : Pos => x = x) n
(fun_ : Pos => x = x) (pos_succ n)
exact (q @ p).Defined.Definitionloopexp {A : Type} {x : A} (p : x = x) (z : BinInt) : (x = x)
:= match z with
| neg n => loopexp_pos p^ n
| zero => 1
| pos n => loopexp_pos p n
end.(** TODO: One can also define [loopexp] as [int_iter (equiv_concat_r p x) z idpath]. This has slightly different computational behaviour, e.g., it sends [1 : int] to [1 @ p] rather than [p]. But with this definition, some of the results below become special cases of results in BinInt.Equiv, and others could be generalized to results belonging in BinInt.Equiv. It's probably worth investigating this. *)
A: Type x: A p: x = x n: Pos
loopexp_pos p^ n = (loopexp_pos p n)^
A: Type x: A p: x = x n: Pos
loopexp_pos p^ n = (loopexp_pos p n)^
A: Type x: A p: x = x
foralln : Pos, loopexp_pos p^ n = (loopexp_pos p n)^
A: Type x: A p: x = x
forallp0 : Pos,
loopexp_pos p^ p0 = (loopexp_pos p p0)^ ->
loopexp_pos p^ (pos_succ p0) =
(loopexp_pos p (pos_succ p0))^
A: Type x: A p: x = x
forallp0 : Pos,
pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) p0 =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) p0)^ ->
pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) (pos_succ p0) =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ p0))^
A: Type x: A p: x = x n: Pos q: pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) n =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n)^
pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) (pos_succ n) =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ n))^
A: Type x: A p: x = x n: Pos q: pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) n =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n)^
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n)^ @ p^ =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n @ p)^
A: Type x: A p: x = x n: Pos q: pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) n =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n)^
(p @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n)^ =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n @ p)^
A: Type x: A p: x = x n: Pos q: pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) n =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n)^
p @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n @ p
A: Type x: A p: x = x n: Pos
p @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n @ p
A: Type x: A p: x = x
foralln : Pos,
p @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n @ p
A: Type x: A p: x = x
forallp0 : Pos,
p @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) p0 =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) p0 @ p ->
p @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ p0) =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ p0) @
p
A: Type x: A p: x = x n: Pos q: p @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n @ p
p @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ n) =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ n) @
p
foralln : Pos,
ap f (loopexp_pos p n) = loopexp_pos (ap f p) n
A, B: Type f: A -> B x: A p: x = x
forallp0 : Pos,
ap f (loopexp_pos p p0) = loopexp_pos (ap f p) p0 ->
ap f (loopexp_pos p (pos_succ p0)) =
loopexp_pos (ap f p) (pos_succ p0)
A, B: Type f: A -> B x: A p: x = x
forallp0 : Pos,
ap f
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) p0) =
pos_peano_ind (fun_ : Pos => f x = f x) (ap f p)
(fun (_ : Pos) (q : f x = f x) => q @ ap f p) p0 ->
ap f
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p)
(pos_succ p0)) =
pos_peano_ind (fun_ : Pos => f x = f x) (ap f p)
(fun (_ : Pos) (q : f x = f x) => q @ ap f p)
(pos_succ p0)
A, B: Type f: A -> B x: A p: x = x n: Pos q: ap f
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n) =
pos_peano_ind (fun_ : Pos => f x = f x) (ap f p)
(fun (_ : Pos) (q : f x = f x) => q @ ap f p) n
ap f
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ n)) =
pos_peano_ind (fun_ : Pos => f x = f x) (ap f p)
(fun (_ : Pos) (q : f x = f x) => q @ ap f p)
(pos_succ n)
A, B: Type f: A -> B x: A p: x = x n: Pos q: ap f
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n) =
pos_peano_ind (fun_ : Pos => f x = f x) (ap f p)
(fun (_ : Pos) (q : f x = f x) => q @ ap f p) n
ap f
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) n @ p) =
pos_peano_ind (fun_ : Pos => f x = f x) (ap f p)
(fun (_ : Pos) (q : f x = f x) => q @ ap f p) n @
ap f p
byrewrite ap_pp, q.Qed.
A, B: Type f: A -> B x: A p: x = x z: BinInt
ap f (loopexp p z) = loopexp (ap f p) z
A, B: Type f: A -> B x: A p: x = x z: BinInt
ap f (loopexp p z) = loopexp (ap f p) z
A, B: Type f: A -> B x: A p: x = x n: Pos
ap f (loopexp p (neg n)) = loopexp (ap f p) (neg n)
A, B: Type f: A -> B x: A p: x = x n: Pos
ap f (loopexp p (pos n)) = loopexp (ap f p) (pos n)
A, B: Type f: A -> B x: A p: x = x n: Pos
ap f (loopexp p (neg n)) = loopexp (ap f p) (neg n)
A, B: Type f: A -> B x: A p: x = x n: Pos
ap f (loopexp_pos p^ n) = loopexp_pos (ap f p)^ n
A, B: Type f: A -> B x: A p: x = x n: Pos
(ap f (loopexp_pos p n))^ = (loopexp_pos (ap f p) n)^
A, B: Type f: A -> B x: A p: x = x n: Pos
ap f (loopexp_pos p n) = loopexp_pos (ap f p) n
apply ap_loopexp_pos.
A, B: Type f: A -> B x: A p: x = x n: Pos
ap f (loopexp p (pos n)) = loopexp (ap f p) (pos n)
apply ap_loopexp_pos.Qed.
A: Type x: A p: x = x a: Pos
loopexp_pos p a @ p = p @ loopexp_pos p a
A: Type x: A p: x = x a: Pos
loopexp_pos p a @ p = p @ loopexp_pos p a
A: Type x: A p: x = x a: Pos aH: loopexp_pos p a @ p = p @ loopexp_pos p a
loopexp_pos p (pos_succ a) @ p =
p @ loopexp_pos p (pos_succ a)
A: Type x: A p: x = x a: Pos aH: loopexp_pos p a @ p = p @ loopexp_pos p a
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ a) @
p =
p @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ a)
A: Type x: A p: x = x a: Pos aH: loopexp_pos p a @ p = p @ loopexp_pos p a
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a @ p) @ p =
p @
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a @ p)
A: Type x: A p: x = x a: Pos aH: loopexp_pos p a @ p = p @ loopexp_pos p a
(loopexp_pos p a @ p) @ p = p @ (loopexp_pos p a @ p)
byrewrite concat_p_pp, aH.Qed.
A: Type x: A p: x = x a, b: Pos
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b
A: Type x: A p: x = x a, b: Pos
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b
A: Type x: A p: x = x
forallab : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b
A: Type x: A p: x = x b: Pos bH: loopexp_pos p (1 + b)%pos =
loopexp_pos p 1%pos @ loopexp_pos p b
loopexp_pos p (1 + pos_succ b)%pos =
loopexp_pos p 1%pos @ loopexp_pos p (pos_succ b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b
loopexp_pos p (pos_succ a + 1)%pos =
loopexp_pos p (pos_succ a) @ loopexp_pos p 1%pos
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b b: Pos bH: loopexp_pos p (pos_succ a + b)%pos =
loopexp_pos p (pos_succ a) @ loopexp_pos p b
loopexp_pos p (pos_succ a + pos_succ b)%pos =
loopexp_pos p (pos_succ a) @
loopexp_pos p (pos_succ b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p (1 + b)%pos =
loopexp_pos p 1%pos @ loopexp_pos p b
loopexp_pos p (1 + pos_succ b)%pos =
loopexp_pos p 1%pos @ loopexp_pos p (pos_succ b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p (pos_succ b) =
loopexp_pos p 1%pos @ loopexp_pos p b
loopexp_pos p (pos_succ (pos_succ b)) =
loopexp_pos p 1%pos @ loopexp_pos p (pos_succ b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p (pos_succ b) =
loopexp_pos p 1%pos @ loopexp_pos p b
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p)
(pos_succ (pos_succ b)) =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) 1%pos @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p (pos_succ b) =
loopexp_pos p 1%pos @ loopexp_pos p b
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ b) @
p =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) 1%pos @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p (pos_succ b) =
loopexp_pos p 1%pos @ loopexp_pos p b
loopexp_pos p (pos_succ b) @ p =
p @ loopexp_pos p (pos_succ b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p (pos_succ b) =
loopexp_pos p 1%pos @ loopexp_pos p b
(p @ loopexp_pos p b) @ p = p @ (p @ loopexp_pos p b)
byrewrite concat_pp_p, loopexp_pos_concat.
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b
loopexp_pos p (pos_succ a + 1)%pos =
loopexp_pos p (pos_succ a) @ loopexp_pos p 1%pos
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b
loopexp_pos p (pos_succ (pos_succ a)) =
loopexp_pos p (pos_succ a) @ loopexp_pos p 1%pos
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p)
(pos_succ (pos_succ a)) =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ a) @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) 1%pos
byrewrite pos_peano_ind_beta_pos_succ.
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b b: Pos bH: loopexp_pos p (pos_succ a + b)%pos =
loopexp_pos p (pos_succ a) @ loopexp_pos p b
loopexp_pos p (pos_succ a + pos_succ b)%pos =
loopexp_pos p (pos_succ a) @
loopexp_pos p (pos_succ b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b b: Pos bH: loopexp_pos p (pos_succ a + b)%pos =
loopexp_pos p (pos_succ a) @ loopexp_pos p b
loopexp_pos p (pos_succ (a + pos_succ b)%pos) =
loopexp_pos p (pos_succ a) @
loopexp_pos p (pos_succ b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b b: Pos bH: loopexp_pos p (pos_succ a + b)%pos =
loopexp_pos p (pos_succ a) @ loopexp_pos p b
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p)
(pos_succ (a + pos_succ b)%pos) =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ a) @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b b: Pos bH: loopexp_pos p (pos_succ a + b)%pos =
loopexp_pos p (pos_succ a) @ loopexp_pos p b
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p)
(a + pos_succ b)%pos @ p =
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a @ p) @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p (a + b)%pos =
loopexp_pos p a @ loopexp_pos p b b: Pos bH: loopexp_pos p (pos_succ a + b)%pos =
loopexp_pos p (pos_succ a) @ loopexp_pos p b
loopexp_pos p (a + pos_succ b)%pos @ p =
(loopexp_pos p a @ p) @ loopexp_pos p (pos_succ b)
loopexp p (binint_pos_sub a b) =
loopexp_pos p^ b @ loopexp_pos p a
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub a b) =
loopexp_pos p^ b @ loopexp_pos p a
A: Type x: A p: x = x a, b: Pos
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x
forallab : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x
loopexp_pos p^ 1%pos @ loopexp_pos p 1%pos =
loopexp p (binint_pos_sub 1%pos 1%pos)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p^ b @ loopexp_pos p 1%pos =
loopexp p (binint_pos_sub 1%pos b)
loopexp_pos p^ (pos_succ b) @ loopexp_pos p 1%pos =
loopexp p (binint_pos_sub 1%pos (pos_succ b))
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b)
loopexp_pos p^ 1%pos @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) 1%pos)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p^ b @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p^ (pos_succ b) @
loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) (pos_succ b))
A: Type x: A p: x = x
loopexp_pos p^ 1%pos @ loopexp_pos p 1%pos =
loopexp p (binint_pos_sub 1%pos 1%pos)
apply concat_Vp.
A: Type x: A p: x = x b: Pos bH: loopexp_pos p^ b @ loopexp_pos p 1%pos =
loopexp p (binint_pos_sub 1%pos b)
loopexp_pos p^ (pos_succ b) @ loopexp_pos p 1%pos =
loopexp p (binint_pos_sub 1%pos (pos_succ b))
A: Type x: A p: x = x b: Pos bH: loopexp_pos p^ b @ loopexp_pos p 1%pos =
loopexp p (binint_pos_sub 1%pos b)
loopexp_pos p^ (pos_succ b) @ p = loopexp p (neg b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p^ b @ loopexp_pos p 1%pos =
loopexp p (binint_pos_sub 1%pos b)
pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) (pos_succ b) @
p = loopexp p (neg b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p^ b @ loopexp_pos p 1%pos =
loopexp p (binint_pos_sub 1%pos b)
(pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) b @ p^) @ p =
loopexp p (neg b)
byrewrite concat_pp_p, concat_Vp, concat_p1.
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b)
loopexp_pos p^ 1%pos @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) 1%pos)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b)
p^ @ loopexp_pos p (pos_succ a) = loopexp_pos p a
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b)
p^ @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ a) =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b)
p^ @
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a @ p) =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b)
p^ @ (p @ loopexp_pos p a) =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a
byrewrite concat_p_pp, concat_Vp, concat_1p.
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p^ b @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p^ (pos_succ b) @
loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) (pos_succ b))
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p^ b @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p^ (pos_succ b) @
loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p^ b @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) b)
pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) (pos_succ b) @
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ a) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p^ b @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) b)
(pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) b @ p^) @
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a @ p) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p^ b @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) b)
(loopexp_pos p^ b @ p^) @ (loopexp_pos p a @ p) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p^ b @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) b)
(loopexp_pos p^ b @ p^) @ (p @ loopexp_pos p a) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p^ b @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p^ b @ ((p^ @ p) @ loopexp_pos p a) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p^ b @ loopexp_pos p (pos_succ a) =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p^ b @ loopexp_pos p a =
loopexp p (binint_pos_sub a b)
apply aH.Qed.
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub a b) =
loopexp_pos p a @ loopexp_pos p^ b
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub a b) =
loopexp_pos p a @ loopexp_pos p^ b
A: Type x: A p: x = x a, b: Pos
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x
forallab : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x
loopexp_pos p 1%pos @ loopexp_pos p^ 1%pos =
loopexp p (binint_pos_sub 1%pos 1%pos)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p 1%pos @ loopexp_pos p^ b =
loopexp p (binint_pos_sub 1%pos b)
loopexp_pos p 1%pos @ loopexp_pos p^ (pos_succ b) =
loopexp p (binint_pos_sub 1%pos (pos_succ b))
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b)
loopexp_pos p (pos_succ a) @ loopexp_pos p^ 1%pos =
loopexp p (binint_pos_sub (pos_succ a) 1%pos)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p (pos_succ a) @ loopexp_pos p^ b =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p (pos_succ a) @
loopexp_pos p^ (pos_succ b) =
loopexp p (binint_pos_sub (pos_succ a) (pos_succ b))
A: Type x: A p: x = x
loopexp_pos p 1%pos @ loopexp_pos p^ 1%pos =
loopexp p (binint_pos_sub 1%pos 1%pos)
apply concat_pV.
A: Type x: A p: x = x b: Pos bH: loopexp_pos p 1%pos @ loopexp_pos p^ b =
loopexp p (binint_pos_sub 1%pos b)
loopexp_pos p 1%pos @ loopexp_pos p^ (pos_succ b) =
loopexp p (binint_pos_sub 1%pos (pos_succ b))
A: Type x: A p: x = x b: Pos bH: loopexp_pos p 1%pos @ loopexp_pos p^ b =
loopexp p (binint_pos_sub 1%pos b)
p @ loopexp_pos p^ (pos_succ b) = loopexp p (neg b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p 1%pos @ loopexp_pos p^ b =
loopexp p (binint_pos_sub 1%pos b)
p @
pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) (pos_succ b) =
loopexp p (neg b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p 1%pos @ loopexp_pos p^ b =
loopexp p (binint_pos_sub 1%pos b)
p @
(pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) b @ p^) =
loopexp p (neg b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p 1%pos @ loopexp_pos p^ b =
loopexp p (binint_pos_sub 1%pos b)
p @ (loopexp_pos p^ b @ p^) = loopexp p (neg b)
A: Type x: A p: x = x b: Pos bH: loopexp_pos p 1%pos @ loopexp_pos p^ b =
loopexp p (binint_pos_sub 1%pos b)
p @ (p^ @ loopexp_pos p^ b) = loopexp p (neg b)
byrewrite concat_p_pp, concat_pV, concat_1p.
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b)
loopexp_pos p (pos_succ a) @ loopexp_pos p^ 1%pos =
loopexp p (binint_pos_sub (pos_succ a) 1%pos)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b)
loopexp_pos p (pos_succ a) @ p^ = loopexp_pos p a
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b)
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ a) @
p^ =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b)
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a @ p) @ p^ =
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b)
(loopexp_pos p a @ p) @ p^ = loopexp_pos p a
byrewrite concat_pp_p, concat_pV, concat_p1.
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p (pos_succ a) @ loopexp_pos p^ b =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p (pos_succ a) @
loopexp_pos p^ (pos_succ b) =
loopexp p (binint_pos_sub (pos_succ a) (pos_succ b))
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p (pos_succ a) @ loopexp_pos p^ b =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p (pos_succ a) @
loopexp_pos p^ (pos_succ b) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p (pos_succ a) @ loopexp_pos p^ b =
loopexp p (binint_pos_sub (pos_succ a) b)
pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) (pos_succ a) @
pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) (pos_succ b) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p (pos_succ a) @ loopexp_pos p^ b =
loopexp p (binint_pos_sub (pos_succ a) b)
(pos_peano_ind (fun_ : Pos => x = x) p
(fun (_ : Pos) (q : x = x) => q @ p) a @ p) @
(pos_peano_ind (fun_ : Pos => x = x) p^
(fun (_ : Pos) (q : x = x) => q @ p^) b @ p^) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p (pos_succ a) @ loopexp_pos p^ b =
loopexp p (binint_pos_sub (pos_succ a) b)
(loopexp_pos p a @ p) @ (loopexp_pos p^ b @ p^) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p (pos_succ a) @ loopexp_pos p^ b =
loopexp p (binint_pos_sub (pos_succ a) b)
(loopexp_pos p a @ p) @ (p^ @ loopexp_pos p^ b) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p (pos_succ a) @ loopexp_pos p^ b =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p a @ ((p @ p^) @ loopexp_pos p^ b) =
loopexp p (binint_pos_sub a b)
A: Type x: A p: x = x a: Pos aH: forallb : Pos,
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b) b: Pos bH: loopexp_pos p (pos_succ a) @ loopexp_pos p^ b =
loopexp p (binint_pos_sub (pos_succ a) b)
loopexp_pos p a @ loopexp_pos p^ b =
loopexp p (binint_pos_sub a b)
apply aH.Qed.
A: Type x: A p: x = x a, b: BinInt
loopexp p (a + b) = loopexp p a @ loopexp p b
A: Type x: A p: x = x a, b: BinInt
loopexp p (a + b) = loopexp p a @ loopexp p b
A: Type x: A p: x = x a: Pos
loopexp_pos p^ a = loopexp_pos p^ a @ 1
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub b a) =
loopexp_pos p^ a @ loopexp_pos p b
A: Type x: A p: x = x b: Pos
loopexp_pos p^ b = 1 @ loopexp_pos p^ b
A: Type x: A p: x = x b: Pos
loopexp_pos p b = 1 @ loopexp_pos p b
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub a b) =
loopexp_pos p a @ loopexp_pos p^ b
A: Type x: A p: x = x a: Pos
loopexp_pos p a = loopexp_pos p a @ 1
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub b a) =
loopexp_pos p^ a @ loopexp_pos p b
A: Type x: A p: x = x b: Pos
loopexp_pos p^ b = 1 @ loopexp_pos p^ b
A: Type x: A p: x = x b: Pos
loopexp_pos p b = 1 @ loopexp_pos p b
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub a b) =
loopexp_pos p a @ loopexp_pos p^ b
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub b a) =
loopexp_pos p^ a @ loopexp_pos p b
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub a b) =
loopexp_pos p a @ loopexp_pos p^ b
A: Type x: A p: x = x a, b: Pos
loopexp p (binint_pos_sub a b) =
loopexp_pos p a @ loopexp_pos p^ b
apply loopexp_binint_pos_sub_r.Qed.(** Under univalence, exponentiation of loops corresponds to iteration of auto-equivalences. *)
A: Type p: A = A z: BinInt a: A
equiv_path A A (loopexp p z) a =
binint_iter (equiv_path A A p) z a
A: Type p: A = A z: BinInt a: A
equiv_path A A (loopexp p z) a =
binint_iter (equiv_path A A p) z a
A: Type p: A = A n: Pos a: A
equiv_path A A (loopexp p (neg n)) a =
binint_iter (equiv_path A A p) (neg n) a
A: Type p: A = A n: Pos a: A
equiv_path A A (loopexp p (pos n)) a =
binint_iter (equiv_path A A p) (pos n) a
A: Type p: A = A n: Pos a: A IH: transport idmap (loopexp_pos p^ n) a =
pos_iter (transport idmap p^) n a
transport idmap (loopexp_pos p^ (pos_succ n)) a =
pos_iter (transport idmap p^) (pos_succ n) a
A: Type p: A = A n: Pos a: A IH: transport idmap (loopexp_pos p n) a =
pos_iter (transport idmap p) n a
transport idmap (loopexp_pos p (pos_succ n)) a =
pos_iter (transport idmap p) (pos_succ n) a
A: Type p: A = A n: Pos a: A IH: transport idmap (loopexp_pos p^ n) a =
pos_iter (transport idmap p^) n a
transport idmap
(pos_peano_ind (fun_ : Pos => A = A) p^
(fun (_ : Pos) (q : A = A) => q @ p^) n @ p^) a =
pos_iter (transport idmap p^) (pos_succ n) a
A: Type p: A = A n: Pos a: A IH: transport idmap (loopexp_pos p n) a =
pos_iter (transport idmap p) n a
transport idmap
(pos_peano_ind (fun_ : Pos => A = A) p
(fun (_ : Pos) (q : A = A) => q @ p) n @ p) a =
pos_iter (transport idmap p) (pos_succ n) a
A: Type p: A = A n: Pos a: A IH: transport idmap (loopexp_pos p^ n) a =
pos_iter (transport idmap p^) n a
transport idmap
(pos_peano_ind (fun_ : Pos => A = A) p^
(fun (_ : Pos) (q : A = A) => q @ p^) n @ p^) a =
transport idmap p^
(pos_peano_rec (A -> A) (transport idmap p^)
(fun (_ : Pos) (g : A -> A) (x : A) =>
transport idmap p^ (g x)) n a)
A: Type p: A = A n: Pos a: A IH: transport idmap (loopexp_pos p n) a =
pos_iter (transport idmap p) n a
transport idmap
(pos_peano_ind (fun_ : Pos => A = A) p
(fun (_ : Pos) (q : A = A) => q @ p) n @ p) a =
transport idmap p
(pos_peano_rec (A -> A) (transport idmap p)
(fun (_ : Pos) (g : A -> A) (x : A) =>
transport idmap p (g x)) n a)