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 Pos.Core.Local Set Universe Minimization ToSet.LocalOpen Scope positive_scope.(** ** Specification of [succ] in term of [add] *)
p: Pos
p + 1 = pos_succ p
p: Pos
p + 1 = pos_succ p
bydestruct p.Qed.
p: Pos
1 + p = pos_succ p
p: Pos
1 + p = pos_succ p
bydestruct p.Qed.(** ** Specification of [add_carry] *)
cbn; apply ap, nH.Qed.(** ** Iteration and [pos_succ] *)
A: Type f: A -> A p: Pos a: A
pos_iter f (pos_succ p) a = f (pos_iter f p a)
A: Type f: A -> A p: Pos a: A
pos_iter f (pos_succ p) a = f (pos_iter f p a)
A: Type f: A -> A p: Pos a: A
pos_peano_rec (A -> A) f
(fun (_ : Pos) (g : A -> A) (x : A) => f (g x))
(pos_succ p) a =
f
(pos_peano_rec (A -> A) f
(fun (_ : Pos) (g : A -> A) (x : A) => f (g x)) p
a)
byrewrite pos_peano_rec_beta_pos_succ.Qed.
A: Type f: A -> A p: Pos a: A
pos_iter f (pos_succ p) a = pos_iter f p (f a)
A: Type f: A -> A p: Pos a: A
pos_iter f (pos_succ p) a = pos_iter f p (f a)
A: Type
forall (p : Pos) (f : A -> A) (a : A),
pos_iter f (pos_succ p) a = pos_iter f p (f a)
A: Type
(funp : Pos =>
forall (f : A -> A) (a : A),
pos_iter f (pos_succ p) a = pos_iter f p (f a)) 1
A: Type
forallp : Pos,
(funp0 : Pos =>
forall (f : A -> A) (a : A),
pos_iter f (pos_succ p0) a = pos_iter f p0 (f a)) p ->
(funp0 : Pos =>
forall (f : A -> A) (a : A),
pos_iter f (pos_succ p0) a = pos_iter f p0 (f a))
(pos_succ p)
A: Type
forallp : Pos,
(funp0 : Pos =>
forall (f : A -> A) (a : A),
pos_iter f (pos_succ p0) a = pos_iter f p0 (f a)) p ->
(funp0 : Pos =>
forall (f : A -> A) (a : A),
pos_iter f (pos_succ p0) a = pos_iter f p0 (f a))
(pos_succ p)
A: Type p: Pos q: forall (f : A -> A) (a : A),
pos_iter f (pos_succ p) a = pos_iter f p (f a) f: A -> A a: A
pos_iter f (pos_succ (pos_succ p)) a =
pos_iter f (pos_succ p) (f a)
A: Type p: Pos q: forall (f : A -> A) (a : A),
pos_iter f (pos_succ p) a = pos_iter f p (f a) f: A -> A a: A
pos_iter f (pos_succ (pos_succ p)) a = ?Goal0
A: Type p: Pos q: forall (f : A -> A) (a : A),
pos_iter f (pos_succ p) a = pos_iter f p (f a) f: A -> A a: A
?Goal0 = ?Goal
A: Type p: Pos q: forall (f : A -> A) (a : A),
pos_iter f (pos_succ p) a = pos_iter f p (f a) f: A -> A a: A
pos_iter f (pos_succ p) (f a) = ?Goal
A: Type p: Pos q: forall (f : A -> A) (a : A),
pos_iter f (pos_succ p) a = pos_iter f p (f a) f: A -> A a: A
f
(pos_peano_rec (A -> A) f
(fun (_ : Pos) (g : A -> A) (x : A) => f (g x))
(pos_succ p) a) =
f
(pos_peano_rec (A -> A) f
(fun (_ : Pos) (g : A -> A) (x : A) => f (g x)) p
(f a))
A: Type p: Pos q: forall (f : A -> A) (a : A),
pos_iter f (pos_succ p) a = pos_iter f p (f a) f: A -> A a: A
pos_peano_rec (A -> A) f
(fun (_ : Pos) (g : A -> A) (x : A) => f (g x))
(pos_succ p) a =
pos_peano_rec (A -> A) f
(fun (_ : Pos) (g : A -> A) (x : A) => f (g x)) p
(f a)
apply q.Qed.(** ** Right reduction properties for multiplication *)
p, q: Pos
p * q~0 = (p * q)~0
p, q: Pos
p * q~0 = (p * q)~0
induction p; simpl; f_ap; f_ap; trivial.Qed.
p, q: Pos
p * q~1 = p + (p * q)~0
p, q: Pos
p * q~1 = p + (p * q)~0
p, q: Pos IHp: p * q~1 = p + (p * q)~0
q + p * q~1 = p + (q + (p * q)~0)
p, q: Pos IHp: p * q~1 = p + (p * q)~0
q + (p + (p * q)~0) = p + (q + (p * q)~0)
p, q: Pos IHp: p * q~1 = p + (p * q)~0
q + p + (p * q)~0 = p + (q + (p * q)~0)
p, q: Pos IHp: p * q~1 = p + (p * q)~0
p + q + (p * q)~0 = p + (q + (p * q)~0)
p, q: Pos IHp: p * q~1 = p + (p * q)~0
p + (q + (p * q)~0) = p + q + (p * q)~0
apply pos_add_assoc.Qed.(** ** Commutativity of multiplication *)
p, q: Pos
p * q = q * p
p, q: Pos
p * q = q * p
p: Pos
p * 1 = p
p, q: Pos IHq: p * q = q * p
p * q~0 = (q * p)~0
p, q: Pos IHq: p * q = q * p
p * q~1 = p + (q * p)~0
p, q: Pos IHq: p * q = q * p
p * q~0 = (q * p)~0
p, q: Pos IHq: p * q = q * p
p * q~1 = p + (q * p)~0
p, q: Pos IHq: p * q = q * p
p * q~0 = (q * p)~0
p, q: Pos IHq: p * q = q * p
(p * q)~0 = (q * p)~0
f_ap.
p, q: Pos IHq: p * q = q * p
p * q~1 = p + (q * p)~0
p, q: Pos IHq: p * q = q * p
p + (p * q)~0 = p + (q * p)~0
f_ap; f_ap.Qed.(** ** Distributivity of addition over multiplication *)