Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.18 KB | None | 0 0
  1. 1 subgoal (ID 16822)
  2.  
  3. Σ : gFunctors
  4. proto_chanG0 : proto_chanG Σ
  5. heapG0 : heapG Σ
  6. l, v : val
  7. ls : list val
  8. p1 : iProto Σ
  9. pc : val → (laterO (proto val (iPropO Σ) (iPropO Σ)) -n> iPropO Σ) -n> iPropO Σ
  10. r' : val
  11. rs' : list val
  12. Heq : S (strings.length ls + S (strings.length rs')) =
  13. strings.length (v :: ls) + strings.length (r' :: rs')
  14. pc' : val → (laterO (proto val (iPropO Σ) (iPropO Σ)) -n> iPropO Σ) -n> iPropO Σ
  15. p1' : iProto Σ
  16. ============================
  17. "IH" : ∀ (a : val) (a0 a1 : list val) (a2 : iProto Σ)
  18. (a3 : val
  19. → (laterO (proto val (iPropO Σ) (iPropO Σ)) -n> iPropO Σ) -n>
  20. iPropO Σ),
  21. ⌜(strings.length ls + S (strings.length rs'))%nat =
  22. (strings.length a0 + strings.length a1)%nat⌝
  23. → proto_interp_aux (strings.length (a :: a0) + strings.length a1)
  24. (a :: a0) a1 a2 (proto_message Receive a3)
  25. -∗ ∃ p2 : iProto Σ,
  26. a3 a (proto_eq_next p2)
  27. ∗ proto_interp_aux (strings.length a0 + strings.length a1) a0 a1
  28. a2 p2
  29. --------------------------------------□
  30. "Heq" : p1 ≡ proto_message Receive pc'
  31. "Hpc'" : pc' r' (proto_eq_next p1')
  32. "Hrec" : (∃ (v0 : val) (l' : list val) (pc0 : val
  33. → (laterO
  34. (proto val
  35. (iPropO Σ)
  36. (iPropO Σ)) -n>
  37. iPropO Σ) -n>
  38. iPropO Σ)
  39. (p2' : iProto Σ),
  40. ⌜l :: v :: ls = v0 :: l'⌝
  41. ∗ proto_message Receive pc ≡ proto_message Receive pc0
  42. ∗ pc0 v0 (proto_eq_next p2')
  43. ∗ (fix
  44. proto_interp_aux (Σ0 : gFunctors) (n : nat)
  45. (l0 r : list val)
  46. (p0 p2 : iProto Σ0) {struct n} :
  47. iProp Σ0 :=
  48. match n with
  49. | 0 => ⌜l0 = []⌝ ∧ ⌜r = []⌝ ∧ iProto_dual p0 ≡ p2
  50. | S n0 =>
  51. (∃ (v1 : val) (l'0 : list val)
  52. (pc1 : val
  53. → (laterO (proto val (iPropO Σ0) (iPropO Σ0)) -n>
  54. iPropO Σ0) -n> iPropO Σ0)
  55. (p2'0 : iProto Σ0),
  56. ⌜l0 = v1 :: l'0⌝
  57. ∗ p2 ≡ proto_message Receive pc1
  58. ∗ pc1 v1 (proto_eq_next p2'0)
  59. ∗ proto_interp_aux Σ0 n0 l'0 r p0 p2'0)
  60. ∨ (∃ (v1 : val) (r'0 : list val)
  61. (pc1 : val
  62. → (laterO (proto val (iPropO Σ0) (iPropO Σ0)) -n>
  63. iPropO Σ0) -n>
  64. iPropO Σ0) (p1'0 : iProto Σ0),
  65. ⌜r = v1 :: r'0⌝
  66. ∗ p0 ≡ proto_message Receive pc1
  67. ∗ pc1 v1 (proto_eq_next p1'0)
  68. ∗ proto_interp_aux Σ0 n0 l0 r'0 p1'0 p2)
  69. end) Σ
  70. ((fix add (n m : nat) {struct n} : nat :=
  71. match n with
  72. | 0 => m
  73. | S p => S (add p m)
  74. end)
  75. ((fix length (l0 : list val) : nat :=
  76. match l0 with
  77. | [] => 0
  78. | _ :: l'0 => S (length l'0)
  79. end) ls) (strings.length (r' :: rs'))) l' rs' p1' p2')
  80. ∨ (∃ (v0 : val) (r'0 : list val) (pc0 : val
  81. → (laterO
  82. (proto val
  83. (iPropO Σ)
  84. (iPropO Σ)) -n>
  85. iPropO Σ) -n>
  86. iPropO Σ)
  87. (p1'0 : iProto Σ),
  88. ⌜rs' = v0 :: r'0⌝
  89. ∗ p1' ≡ proto_message Receive pc0
  90. ∗ pc0 v0 (proto_eq_next p1'0)
  91. ∗ (fix
  92. proto_interp_aux (Σ0 : gFunctors)
  93. (n : nat) (l0 r : list val)
  94. (p0 p2 : iProto Σ0) {struct n} :
  95. iProp Σ0 :=
  96. match n with
  97. | 0 => ⌜l0 = []⌝ ∧ ⌜r = []⌝ ∧ iProto_dual p0 ≡ p2
  98. | S n0 =>
  99. (∃ (v1 : val) (l' : list val)
  100. (pc1 : val
  101. → (laterO (proto val (iPropO Σ0) (iPropO Σ0)) -n>
  102. iPropO Σ0) -n>
  103. iPropO Σ0) (p2' : iProto Σ0),
  104. ⌜l0 = v1 :: l'⌝
  105. ∗ p2 ≡ proto_message Receive pc1
  106. ∗ pc1 v1 (proto_eq_next p2')
  107. ∗ proto_interp_aux Σ0 n0 l' r p0 p2')
  108. ∨ (∃ (v1 : val) (r'1 : list val)
  109. (pc1 : val
  110. → (laterO
  111. (proto val (iPropO Σ0) (iPropO Σ0)) -n>
  112. iPropO Σ0) -n>
  113. iPropO Σ0) (p1'1 : iProto Σ0),
  114. ⌜r = v1 :: r'1⌝
  115. ∗ p0 ≡ proto_message Receive pc1
  116. ∗ pc1 v1 (proto_eq_next p1'1)
  117. ∗ proto_interp_aux Σ0 n0 l0 r'1 p1'1 p2)
  118. end) Σ
  119. ((fix add (n m : nat) {struct n} : nat :=
  120. match n with
  121. | 0 => m
  122. | S p => S (add p m)
  123. end)
  124. ((fix length (l0 : list val) : nat :=
  125. match l0 with
  126. | [] => 0
  127. | _ :: l' => S (length l')
  128. end) ls) (strings.length (r' :: rs')))
  129. (l :: v :: ls) r'0 p1'0 (proto_message Receive pc))
  130. --------------------------------------∗
  131. ∃ p2 : iProto Σ,
  132. pc l (proto_eq_next p2)
  133. ∗ proto_interp_aux (strings.length (v :: ls) + strings.length (r' :: rs'))
  134. (v :: ls) (r' :: rs') p1 p2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement