Theory Poincare

theory Poincare
  imports Complex_Main "HOL-Analysis.Inner_Product" GammaFactor
begin

typedef PoincareDisc = "{z::complex. cmod z < 1}"
  by (rule exI [where x=0], auto)

setup_lifting type_definition_PoincareDisc

abbreviation to_complex :: "PoincareDisc  complex" where 
  "to_complex  Rep_PoincareDisc" 
abbreviation of_complex :: "complex  PoincareDisc" where 
  "of_complex  Abs_PoincareDisc" 

lemma poincare_disc_two_elems:
  shows " z1 z2::PoincareDisc. z1  z2"
proof-
  have "cmod 0 < 1"
    by simp
  moreover
  have "cmod (1/2) < 1"
    by simp
  moreover
  have "(0::complex)  1/2"
    by simp
  ultimately
  show ?thesis
    by transfer blast
qed

lift_definition inner_p :: "PoincareDisc  PoincareDisc  real" (infixl "" 100) is inner .

lift_definition norm_p :: "PoincareDisc  real"  ("_" [100] 101) is norm .

lemma norm_lt_one:
  shows "u < 1"
  by transfer simp

lemma norm_geq_zero:
  shows "u  0"
  by transfer simp

lemma square_norm_inner:
  shows "(u)2 = u  u"
  by transfer (simp add: dot_square_norm)

lift_definition gammma_factor_p :: "PoincareDisc  real" ("γp") is gamma_factor .

lemma gamma_factor_p_nonzero [simp]:
  shows "γp u  0"
  apply transfer
  unfolding gamma_factor_def
  using gamma_factor_nonzero
  by auto

lemma gamma_factor_p_positive [simp]:
  shows "γp u > 0"
  by transfer (simp add: gamma_factor_positive)

lemma norm_square_gamma_factor_p:
  shows "(u)^2 = 1 - 1 / (γp u)^2"
  by transfer (simp add: norm_square_gamma_factor)

lemma norm_square_gamma_factor_p':
  shows "(u)^2 = ((γp u)^2 - 1) / (γp u)^2"
  by transfer (simp add: norm_square_gamma_factor')

lemma gamma_factor_p_square_norm:
  shows "(γp u)2 = 1 / (1 - (u)2)"
  by transfer (simp add: gamma_factor_square_norm)

end