Proof: Difference between revisions

634 bytes added ,  9 years ago
Commutativity of addition in OCaml
(OCaml version (now possible with GADT's))
(Commutativity of addition in OCaml)
Line 689:
Exists_plus_even (Plus_succ (Plus_succ plus), Even_ss even)
 
(* 3.3 *)
</lang>
 
(* 0 + n = n *)
let rec plus_zero : type a. a nat -> (zero, a, a) plus = function
| Zero -> Plus_zero
| Succ a -> Plus_succ (plus_zero a)
 
(* a + b = n => (a + 1) + b = (n + 1) *)
let rec plus_succ_left : type a b sum. (a, b, sum) plus -> (a succ, b, sum succ) plus =
function
| Plus_zero -> Plus_zero
| Plus_succ plus -> Plus_succ (plus_succ_left plus)
 
(* a + b = n => b + a = n *)
let rec plus_commutative : type a b sum. a nat -> (a, b, sum) plus -> (b, a, sum) plus =
fun a plus ->
match plus with
| Plus_zero -> plus_zero a
| Plus_succ plus' ->
plus_succ_left (plus_commutative a plus')
 
</lang>
 
=={{header|Omega}}==
2

edits