Module div2

Require Export Zextensions.
Require Export pow.
 
Fixpoint ceildiv2' [n : nat] : nat :=
 Cases n of
   O => O
  | (S O) => (S O)
  | (S (S n)) => (S (ceildiv2' n))
 end.
 
Lemma two_step_ind:
 (P : nat -> Prop)
 (P O) -> (P (S O)) -> ((n : nat) (P n) -> (P (S (S n)))) -> (n : nat) (P n).
 
Lemma ceildiv2_aux_lemma:
 (n : nat)
  (mult (S (S O)) (ceildiv2' n)) = n \/
  (mult (S (S O)) (ceildiv2' n)) = (plus n (S O)).
 
Definition ceildiv2:
 (n : nat)
  {p : nat | (mult (S (S O)) p) = n \/ (mult (S (S O)) p) = (plus n (S O))}.
 
Fixpoint floordiv2 [n : nat] : nat :=
 Cases n of (S (S n)) => (S (floordiv2 n)) | _ => O end.
 
Lemma floordiv2_ge: (n : nat) (le (mult (S (S O)) (floordiv2 n)) n).
 
Lemma ceildiv2_eq: (n : nat) (plus (ceildiv2' n) (floordiv2 n)) = n.
 
Lemma hdiv_decrease:
 (h, h' : nat)
 (lt (S O) h) ->
 (mult (S (S O)) h') = h \/ (mult (S (S O)) h') = (plus h (S O)) -> (lt h' h).
 
Lemma pow_decompose:
 (b : Z)
 (h : nat) (pow b h) = (Zmult (pow b (ceildiv2' h)) (pow b (floordiv2 h))).
 
Lemma ceildiv2_characteristic:
 (h, h' : nat)
 <nat> (mult (S (S O)) h') = h \/ <nat> (mult (S (S O)) h') = (plus h (S O)) ->
  (ceildiv2' h) = h'.
 
Lemma pow_ceil_ge_pow_floor:
 (b : Z)
 (Zlt ZERO b) -> (h : nat) (Zle (pow b (floordiv2 h)) (pow b (ceildiv2' h))).
 
Lemma ceildivPos: (h : nat) (lt O h) -> (lt O (ceildiv2' h)).
 
Lemma floordiv2_le_ceildiv2: (h : nat) (le (floordiv2 h) (ceildiv2' h)).
 
Theorem le_ceildiv2': (n : nat) (le (ceildiv2' n) n).
Hint arith := Resolve le_ceildiv2'.
 
Theorem lt_ceildiv2': (n : nat) (lt (S O) n) -> (lt (ceildiv2' n) n).
 
Theorem lt_floordiv: (n : nat) (lt (S O) n) -> (lt O (floordiv2 n)).

Index
This page has been generated by coqdoc