表示具有粘合条件的集

时间:2019-07-14 14:15:12

标签: isabelle

我正在尝试在Isabelle中表示投影椭圆曲线加法:

function proj_add :: "(real × real) × bit ⇒ (real × real) × bit ⇒ (real × real) × bit" where
  "proj_add ((x1,y1),l) ((x2,y2),j) = ((add (x1,y1) (x2,y2)), l+j)" 
    if "delta x1 y1 x2 y2 ≠ 0"
| "proj_add ((x1,y1),l) ((x2,y2),j) = ((ext_add (x1,y1) (x2,y2)), l+j)" 
if "delta' x1 y1 x2 y2 ≠ 0"

到目前为止,我已经学会了如何进行条件定义,并建议对{0,1}中的值使用位类型。这是第三个表示问题。假设以下定义:

 definition "e_aff = {(x,y). e' x y = 0}" 
 definition "e_circ = {(x,y). x ≠ 0 ∧ y ≠ 0 ∧ (x,y) ∈ e_aff}"

投影椭圆曲线的定义如下:(请参见第12、13 here页):

  

沿着同构τ沿e_circ粘贴e_aff的两个副本。我们使用e_aff的第一个副本为E中的P∈e_aff的图像写(P,i)∈E,其中i∈{0,1}。胶合条件为P∈e_circ,(P,i)   =(τP,i + 1)

我该如何在Isabelle中代表这个场景?我的想法是,这应该是一个由一个或两个元素组成的等价类的商集。但是,如何限制上述功能在这些等效类上起作用?

修改

等价关系是通过将该关系与使其成为反身的or条件组合而成的。

1 个答案:

答案 0 :(得分:0)

这是我遵循的方法的草图:

definition "proj_add_class c1 c2 =
  (((case_prod (λ x y. the (proj_add x y))) ` 
   (Map.dom (case_prod proj_add) ∩ (c1 × c2))) 
   // gluing)"

definition "proj_addition c1 c2 = the_elem(proj_add_class c1 c2)"

我遵循Gather all non-undefined values after addition的答案。