(* ========================================================================== *)
(* FLYSPECK - BOOK FORMALIZATION                                              *)
(*                                                                            *)
(* Definition: muR                                                            *)
(* Chapter: LEG                                                               *)
(* Author: Thomas C. Hales                                                    *)
(* Date: 2010-02-07                                                           *)
(* ========================================================================== *)




(*
This is the cayleyR function, expressed in terms of the unsquared variables
indexing: five vertices v1..v5, yij runs from vi to vj,
two tetrahedra, shared face v1,v2,v3.
v4 v5 in opposite half-planes.
enclosed = y45 = sqrt(x45) is the distance from v4 to v5.
[y1,y2,y3,y4,y5,y6,y7,y8,y9]=[y14,y24,y34,y23,y13,y12,y15,y25,y35].
y1..y6 is the usual indexing of a simplex.
y4..y9 is mod 6 congruent to the usual indexing.
*)



module type Mur_def_type = sig
  val muR : thm
  val muRa : thm
end;;


flyspeck_needs "leg/cayleyR_def.hl";;



module Mur : Mur_def_type = struct

  let cayleyR = Cayleyr.cayleyR;;

 
let muR = 
new_definition `muR y1 y2 y3 y4 y5 y6 y7 y8 y9 x = cayleyR (y6*y6) (y5*y5) (y1*y1) (y7*y7) (y4*y4) (y2*y2) (y8*y8)  (y3*y3) (y9*y9) x`;;
let muRa = 
prove( `muR y1 y2 y3 y4 y5 y6 y7 y8 y9 = cayleyR (y6*y6) (y5*y5) (y1*y1) (y7*y7) (y4*y4) (y2*y2) (y8*y8) (y3*y3) (y9*y9)`,
ONCE_REWRITE_TAC[FUN_EQ_THM] THEN REWRITE_TAC[muR]);;
end;;