Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  tame_defs.hl   Sprache: unbekannt

 
Spracherkennung für: .hl vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

(* ========================================================================== *)
(* FLYSPECK - BOOK FORMALIZATION                                              *)
(*                                                                            *)
(* Definitions                                                                  *)
(* Chapter: Tame Hypermap                                                               *)
(* Author: Thomas C. Hales                                                    *)
(* Date: 2010-02-27                                                           *)
(* ========================================================================== *)

(*
Definitions file for Tame Hypermap 
*)

flyspeck_needs "hypermap/hypermap.hl";;
flyspeck_needs "fan/fan_defs.hl";;
flyspeck_needs "packing/pack_defs.hl";;

module Tame_defs  = struct




(*
let edge_nondegenerate = new_definition `edge_nondegenerate (H:(A)hypermap)  
   <=> !(x:A).(x IN dart H) ==> ~ (edge_map H x = x)`;;
*)

let is_edge_nondegenerate = new_definition `is_edge_nondegenerate (H:(A)hypermap) <=> 
  (!x:A. x IN dart H ==> ~(edge_map H x = x))`;;

let is_node_nondegenerate = new_definition `is_node_nondegenerate (H:(A)hypermap) <=> 
   (!x:A. x IN dart H ==> ~(node_map H x = x))`;;



(* no_loops does not restrict x,y to be darts.  But edge H is the
   identitiy outside darts, so this is OK. *)

let no_loops = new_definition `no_loops (H:(A) hypermap) <=> ! (x:A) (y:A). x IN edge H y /\ x IN node H y ==> x = y`;;  

(* this definition is more complicated than it needs to be.  It is
   better to use hypermap.hl is_no_double_joints *)

(*
  let hypermap_no_double_joins = new_definition 
  `hypermap_no_double_joins (H:(A) hypermap) <=> 
  ! (x:A) (y:A) (z:A) (t:A) (u:A) (v:A). x IN node H z /\ y IN (edge H x INTER node H t) /\ ~ (x = y) 
  /\ ~(z IN node H t) /\ u IN node H z /\ v IN (edge H u INTER node H t) 
  /\ ~(u = v) ==>  x IN edge H u`;; 
*)

let is_no_double_joints = new_definition `is_no_double_joints (H:(A)hypermap) 
   <=> (!x y. x IN dart H /\ y IN node H x /\ edge_map H y IN node H (edge_map H x) ==> x = y)`;;

let exceptional_face = new_definition `exceptional_face (H:(A)hypermap) (x:A) <=> CARD (face H x) >= 5`;;

let set_of_triangles_meeting_node = new_definition 
   `set_of_triangles_meeting_node (H:(A)hypermap) (x:A) = 
         {face H (y:A) |y | y IN dart H /\ CARD (face H y) = 3 /\  y IN node H x }`;;

let set_of_quadrilaterals_meeting_node = new_definition 
    `set_of_quadrilaterals_meeting_node (H:(A)hypermap) (x:A) = 
     {face (H:(A)hypermap) (y:A)|y | y IN dart H /\ CARD (face H y) = 4 /\ y IN node H x}`;;

let set_of_exceptional_meeting_node = new_definition 
  `set_of_exceptional_meeting_node (H:(A)hypermap) (x:A) =
  {face H (y:A) | y | (y IN (dart H)) /\ (CARD (face H y) >= 5) /\ (y IN node H x)}`;;

let set_of_face_meeting_node = new_definition 
  `set_of_face_meeting_node (H:(A)hypermap) (x:A) = 
   {face H (y:A)|y| y IN dart H /\ y IN node H x}`;;

let type_of_node = new_definition 
  `type_of_node (H:(A)hypermap) (x:A) = 
   (CARD (set_of_triangles_meeting_node H x), 
    CARD (set_of_quadrilaterals_meeting_node H x), 
    CARD (set_of_exceptional_meeting_node H x ))`;;

let node_type_exceptional_face = new_definition 
  `node_type_exceptional_face (H:(A)hypermap) (x:A) <=> 
   exceptional_face H x /\ (CARD (node H x) = 6) ==> type_of_node H x = (5,0,1)`;;

let node_exceptional_face = new_definition 
  `node_exceptional_face (H:(A)hypermap) (x:A) <=> 
    exceptional_face H x ==> CARD (node H x) <= 6`;;


let tgt = new_definition `tgt = #1.541`;;

(* b table constants corrected 2010-06-17 *)

    let b_tame = new_definition 
  `b_tame p q= 
           if p,q =0,3 then #0.618
    else if p,q=0,4 then #0.97
    else if p,q=1,2 then #0.656
    else if p,q=1,3 then #0.618
    else if p,q=2,1 then #0.797
    else if p,q=2,2 then #0.412
    else if p,q=2,3 then #1.2851
    else if p,q=3,1 then #0.311
    else if p,q=3,2 then #0.817
    else if p,q=4,0 then #0.347
    else if p,q=4,1 then #0.366
    else if p,q=5,0 then #0.04
    else if p,q=5,1 then #1.136
    else if p,q=6,0 then #0.686
    else if p,q=7,0 then #1.450
    else tgt`;;



(*
let d_tame = new_definition `d_tame n = if n = 3 then &0 else 
                      if n = 4 then &206 / &1000 else
                      if n = 5 then &483 / &1000 else 
                      if n = 6 then &760 / &1000 else tgt`;;
*)

let d_tame = new_definition `d_tame n = 
     if n = 3 then &0 else 
     if n = 4 then #0.206 else
     if n = 5 then #0.4819 else 
     if n = 6 then #0.7578 else tgt`;;

let a_tame = new_definition `a_tame = #0.63`;;

let total_weight = new_definition 
  `total_weight (H:(A)hypermap) (w:(A->bool)->real) = sum (face_set H) w`;;

let adm_1 = new_definition 
 `adm_1 (H:(A)hypermap) (w:(A->bool)->real) <=> (!x:A. w (face H x)  >= d_tame (CARD (face H x)))`;;

let adm_2 = new_definition 
  `adm_2 (H:(A)hypermap) (w:(A->bool)->real) <=> 
  (!x:A. (CARD (set_of_exceptional_meeting_node H x) = 0) ==>
   ((sum (set_of_face_meeting_node H x) w) >=
   (b_tame (CARD (set_of_triangles_meeting_node H x)) (CARD (set_of_quadrilaterals_meeting_node H x)))))`;;

let adm_3 = new_definition 
  `adm_3 (H:(A)hypermap) (w:(A->bool)->real) <=>
   (!x:A. type_of_node H x = 501 ==> 
  (sum (set_of_triangles_meeting_node H x) w)  >= a_tame)`;;

let admissible_weight = new_definition 
  `admissible_weight (H:(A)hypermap) (w:(A->bool)->real) <=> 
  adm_1 H w /\ adm_2 H w /\ adm_3 H w`;;


(* def of tame *)

let tame_1 = new_definition 
  `tame_1 (H:(A)hypermap) <=> 
  plain_hypermap (H:(A)hypermap) /\ planar_hypermap (H:(A)hypermap)`;;

let tame_2 = new_definition 
  `tame_2 (H:(A)hypermap) <=> 
  connected_hypermap H /\ simple_hypermap H`;;

let tame_3 = new_definition 
  `tame_3 (H:(A)hypermap)  <=>  is_edge_nondegenerate H `;;

let tame_4 = new_definition 
  `tame_4 (H:(A)hypermap)  <=> no_loops H`;;

let tame_5a = new_definition 
  `tame_5a (H:(A)hypermap)  <=> is_no_double_joints H`;;

let tame_8 = new_definition 
  `tame_8 (H:(A)hypermap)  <=> number_of_faces H >= 3`;;

let tame_9a = new_definition 
  `tame_9a (H:(A)hypermap)  <=> 
  (!(x:A). x IN dart H ==> CARD (face H x) >= 3 /\ CARD (face H x) <= 6)`;;

let tame_10 = new_definition 
  `tame_10 (H:(A)hypermap) <=> 
   number_of_nodes H  IN { 131415 } `;;

let tame_11a = new_definition 
  `tame_11a (H:(A)hypermap) <=>
   (!(x:A). x IN dart H ==>  CARD (node H x) >= 3)`;;

let tame_11b = new_definition 
  `tame_11b (H:(A)hypermap) <=>
   (!(x:A). x IN dart H ==> CARD (node H x) <= 7)`;;

let tame_12o = new_definition 
 `tame_12o (H:(A)hypermap)  <=> 
  (! (x:A). node_type_exceptional_face H x /\ node_exceptional_face H x)`;;

let tame_13a = new_definition 
  `tame_13a (H:(A)hypermap) <=>
   (?(w:(A->bool)->real). admissible_weight H w /\ total_weight H w < tgt)`;;

let tame_hypermap = new_definition 
  `tame_hypermap (H:(A)hypermap) <=> 
   tame_1 H /\ tame_2 H /\ tame_3 H /\ tame_4 H /\ 
  tame_5a H /\ tame_8 H /\ tame_9a H  /\ 
  tame_10 H /\ tame_11a H /\ tame_11b H /\ tame_12o H /\ tame_13a H`;;

let opposite_hypermap = new_definition 
   `opposite_hypermap (H:(A)hypermap) = 
   hypermap ((dart H),face_map H o node_map H , inverse(node_map H),inverse(face_map H))`;;


let ESTD = new_definition 
  `ESTD (V:real^3->bool) = {{v,w}| v IN V /\ w IN V /\ ~(v = w) /\ dist(v,w) <= (&2)*h0}`;;

let ECTC = new_definition 
  `ECTC (V:real^3 -> bool) = {{v,w}| v IN V /\ w IN V /\ ~(v = w) /\ dist(v,w) = &2 }`;;

(*  
let isolated_node = new_definition
  `isolated_node v V E = (set_of_edge v V E = {})`;;
*)

let azim_dart = new_definition 
  `azim_dart (V,E) (v,w) = if (v=w) then &2 * pi else azim_fan (vec 0V E v w`;;

let dart1_of_fan = new_definition
  `dart1_of_fan ((V:A->bool),(E:(A->bool)->bool)) =  { (v,w) | {v,w} IN E }`;;

let dart_of_fan = new_definition
  `dart_of_fan (V,E) =
   { (v,v) | v IN V /\ set_of_edge (v:real^3) V E = {} } UNION { (v,w) | {v,w} IN E }`;;

 (* in fan/introduction.hl a dart is a 4-tuple.  Here it is a pair.  Here is the correspondence *)

let extended_dart = new_definition
  `extended_dart (V,E) (v,w) = i_fan (vec 0) V E (vec 0, v, w, w)`;;

let contracted_dart = new_definition
  `contracted_dart (x:A,v:B,w:C,w1:D) = (v,w)`;;

(* e_fan, n_fan, f_fan of fan/introduction.hl, restricted to pairs *)

let e_fan_pair = new_definition `e_fan_pair (V,E) (v,w) = (w,v)`;;

let n_fan_pair = new_definition 
  `n_fan_pair (V,E) (v,w) = v,sigma_fan (vec 0) V E v w`;;

let f_fan_pair = new_definition 
  `f_fan_pair (V,E) (v,w) = w,(inverse_sigma_fan (vec 0) V E w v)`;;

let hypermap_of_fan  = new_definition
  `hypermap_of_fan (V,E) = 
    (let p = ( \ t. res (t (V,E) ) (dart1_of_fan (V,E)) ) in 
          hypermap( dart_of_fan (V,E) , p e_fan_pair, p n_fan_pair, p f_fan_pair))`;;

let face_set_of_fan = new_definition
  `face_set_of_fan (V,E) = face_set (hypermap_of_fan (V,E))`;;


(* compare fan80 and fan81, which define fully_surrounded *)

let surrounded_node = new_definition
  `surrounded_node (V,E) v = 
  !x. (x IN dart_of_fan (V,E)) /\ (FST x = v) ==> azim_dart (V,E) x < pi`;;

let scriptL = new_definition 
  `scriptL V = sum V ( \ (v:real^3) . lmfun (norm v  /  &2)) `;;

  let contravening = new_definition
     `contravening V <=> packing V /\ V SUBSET ball_annulus /\  scriptL V > &12 /\ 
      (!W. packing W /\ W SUBSET ball_annulus ==> scriptL W <= scriptL V) /\
      (CARD V = 13 \/ CARD V = 14 \/ CARD V = 15) /\
      (!v. v IN V ==> surrounded_node (V, ESTD V) v) /\
      (!v. v IN V ==> (surrounded_node (V, ECTC V) v \/ (norm v = &2) ))`;;

let topological_component_yfan = new_definition 
  `topological_component_yfan ((x:real^3),(V:real^3->bool),E) =
      {  connected_component (yfan (x,V,E)) y  | y | y IN yfan (x,V,E) }`;;

(* there is a function dart_leads_into in fan/introduction.hl.  This is a bit simpler. *)

let dart_leads_into1 = new_definition 
    `dart_leads_into1 (x,V,E) (v,u) = @s.  s IN topological_component_yfan (x,V,E) /\
 (?eps. (eps < &1) /\ 
    rw_dart_fan x V E (x,v,u,sigma_fan x V E v u) eps  SUBSET s)`;;

let dartset_leads_into = new_definition
  `dartset_leads_into (x,V,E) ds = 
    @s. (!y. (y IN ds) ==> (s=dart_leads_into1 (x,V,E) y))`;;

(* node(x) not needed, use FST x *)

let h_dart = new_definition `h_dart (x:real^3#B) = norm (FST x)  / &>2`;;

let tauVEF = new_definition `tauVEF (V,E,f) = 
  sum f ( \ x. azim_dart (V,E) x * (&1 + (sol0/pi) * (&1 - lmfun (h_dart x))))   + (pi + sol0)*(&2 - &(CARD(f)))`;;


let restricted_hypermap = new_definition `restricted_hypermap (H:(A)hypermap) <=> 
   is_no_double_joints H /\  ~(dart H = {}) /\ planar_hypermap H /\ connected_hypermap H /\ 
   plain_hypermap H /\ simple_hypermap H /\ is_edge_nondegenerate H /\ is_node_nondegenerate H /\ 
   (!f.  f IN face_set H ==> CARD(f) >= 3)`;;


let rho_node = new_definition 
  `rho_node (V:A1,E:A2,f:A3#A4->bool) v = @w. (v,w) IN f`;;

let per = new_definition
`per(V,E,f) v k = sum (0..k-1
   ( \ i. arcV (vec 0) ((rho_node (V,E,f) POWER i) v) ((rho_node (V,E,f) POWER (i+1)) v))`;;


let perimeterbound = new_definition `perimeterbound (V,E) = 
  (!f. f IN face_set_of_fan (V,E) ==> 
       sum f (\ (v,w).  arcV (vec 0) (v:real^3) w ) <= &2 * pi)`;;


end;;


[Dauer der Verarbeitung: 0.3 Sekunden, vorverarbeitet 2026-06-10]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge