playground/coq/unfinished/zarith.v

52 lines
1.0 KiB
Coq

Require Import ZArith Lia.
Search (nat -> Z).
Definition f (n:nat) : Z :=
if (Nat.eqb n 0) then 1
else if (Nat.even n) then (Z.of_nat (Nat.div n 2))
else -(Z.of_nat (Nat.div (n-1) 2)).
Compute f 0.
Compute f 1.
Compute f 2.
Compute f 3.
Compute f 4.
Compute f 5.
Compute (1=?1)%bool.
Theorem f_inj : forall a b:nat, (a > 0) -> (b > 0) ->
(f a = f b) -> (a = b).
Proof.
intros.
case_eq (Nat.eqb a 1).
- intros.
intros.
destruct a.
- lia. (* case: a = 0 *)
- destruct a.
* lia. (* case: a = S a' = S 0 = 1 *)
* (* case: a = S a' = S (S a'') *)
Restart.
intros.
destruct (Nat.even a).
- destruct (Nat.odd a).
Definition egfn (n:nat):nat := n + 1.
Goal
(*let egfn := fun n:nat => n + 1 in*)
forall a b:nat, egfn a = egfn b -> a = b.
Proof.
intros.
Abort.
Definition f (val:{n:nat | n > 0}) : Z :=
let n':nat :=
match val with
| exists P x prf => x
end in
if (Nat.eqb 1 0) then 1
else if (Nat.even n) then (Z.of_nat (Nat.div n 2))
else -(Z.of_nat (Nat.div (n-1) 2)).