Fil-C on Nix

Filnix wiki

the formal campaign

rocq/theories/Locale.v

Trusted setlocale boundary for the selected glibc categories. Names are borrowed strings, not caller-owned allocations. The epoch marks a validity window, not a claim that every stale pointer traps. Native representation, prefix coverage and safepoint stability remain independent obligations; there are no new runtime axioms.

From Stdlib Require Import String ZArith List Bool Lia
From Nanofil Require Import Term Syntax Values Memory Runtime Ops Semantics Identity ExternalCalls ExternalMachine
Import ListNotations
Open Scope Z_scope
Open Scope list_scope

This selected glibc has thirteen categories; CTYPE is 0 and ALL 6.

14Definition locale_categories: listZ ≔
0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12

One authoritative logical locale state. The codec is opaque, not inferred from an ASCII name. Representation owns internal roots and exclusive release permissions; names themselves confer no ownership.

19Record locale_world: Type ≔ mkLocaleWorld
locale_epoch
 : nat
locale_name
 : Z → ptr
locale_text
 : Z → listZ
locale_codec
 : term
locale_reads
 : listspan
locale_roots
 : listspan
locale_owned
 : listZ

Release eligibility is distinct from writable pointer authority. Exclusive ownership itself belongs to the trusted representation.

31Definition locale_heapm base : Prop ≔
∃reg, object_regionbase m_regionsm = Somereg ∧ r_kindreg = Heap ∧ r_lifereg = Live

The selected implementation's borrowed names have aligned object bases, even when the returned character address is unaligned. This is the source-object premise of copy_domain, not write permission.

37Definition locale_names_alignedw : Prop ≔
∀category, Incategory locale_categories → ∃base, ptr_caplocale_namew category = Objbase ∨ ptr_caplocale_namew category = Robase ∧ base mod 8 = 0

Every current name is readable through NUL and every write root is independently writable. The opaque representation includes actual initialized libc/environment/TLS state and exclusive release rights. locale_names_aligned holds at entry and after every setter endpoint.

46Definition locale_readyrep : mem → locale_world → Prop m w : Prop ≔
repm w ∧ Forallwritable_spanm locale_rootsw ∧ ∀category, Incategory locale_categories → ptr_addrlocale_namew category ≠ 0 ∧ c_stringm locale_namew category locale_textw category ∧ Forallλsource ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw ∧ Foralllocale_heapm locale_ownedw ∧ locale_names_alignedw

A current name can supply memcpy's object-base alignment without aligning its character address or changing its borrowed capability.

56Lemma locale_name_aligned
∀ rep m w category
∃base, ptr_caplocale_namew category = Objbase ∨ ptr_caplocale_namew category = Robase ∧ base mod 8 = 0
Explore proof 2 tactics

Initial goal

⊢
∀rep : mem → locale_world → Prop m : mem w : locale_world category : Z, locale_readyrep m w → Incategory locale_categories → ∃base : Z, ptr_caplocale_namew category = Objbase ∨ ptr_caplocale_namew category = Robase ∧ base mod 8 = 0

intros rep m w category _ & _ & _ & _ & _ & Haligned Hcat

rep :
mem → locale_world → Prop
m :
category :
Z
Hcat :
⊢
∃base : Z, ptr_caplocale_namew category = Objbase ∨ ptr_caplocale_namew category = Robase ∧ base mod 8 = 0

exact Halignedcategory Hcat

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros rep m w category _ & _ & _ & _ & _ & Haligned Hcat
exact Halignedcategory Hcat

A current name's NUL-inclusive borrowed source span.

66Definition locale_name_spanw category : span ≔
mkSpanlocale_namew category Z.of_natlengthlocale_textw category + 1

Private objects whose own capabilities may survive a setter. Neither the caller's input nor capabilities loaded from aux enter this pool.

71Definition locale_private_sourcesw : listspan ≔

Retained authority has object-level private provenance. Zero-sized spans still carry their object's own capability. Fresh objects may be retained as Obj or Ro; old authority is never upgraded.

77Definition locale_retained_capw born c : Prop ≔
∃base, Inbase born ∧ c = Objbase ∨ c = Robase ∨ ∃source, Insource locale_private_sourcesw ∧ c = ptr_capspan_ptrsource

Null is tested by address, as in native C. No capability or input string is required for the null-query operand.

83Definition locale_queryxs : listword : bool ≔
match xs with
⇒
ptr_addrp =? 0
_
⇒
false

Independent input admission; computing a source span never admits an unterminated or incorrectly-capabilitied setter string.

88Definition setlocale_prerep xs m w : Prop ≔
locale_readyrep m w ∧ ∃category p, xs = WIntcategory; WPtrp ∧ Incategory locale_categories ∧ ptr_addrp = 0 ∨ ∃bytes, c_stringm p bytes

Exact P result and W/P argument classes, including discarded results.

94Definition setlocale_abir args : Prop ≔
r = CVoid ∨ ∃d, r = CResultd P ∧ ∃category name, args = ArgW category; ArgP name

Existing libc roots and current borrowed names supply retained authority. The setter input contributes its independently admitted string span, but never becomes writable merely by being an input.

101Definition locale_sourcesxs m w : listspan ≔
++
match xs with
⇒
→
[ ]
else
_
⇒
[ ]

Only setters may mutate or allocate. Querying is a pure projection.

110Definition locale_writesxs w : listspan ≔

Queries have no release permission either.

114Definition locale_releasesxs w : listZ ≔

Keeping an epoch preserves every current borrowed pointer. A successor may replace them, even when effective locale names stay the same; a setter never promises persistence of an old borrow.

120Definition locale_windoww w′ : Prop ≔

Refusal leaves the effective locale unchanged, not necessarily all internal allocations or errno. Its borrow window stays valid.

127Definition locale_unchangedw w′ : Prop ≔

Successful selection may change the requested category and ALL's composite name. Encoding changes only for CTYPE or ALL. Empty input selects from the represented environment; no C/ASCII restriction.

134Definition locale_selectedcategory w w′ : Prop ≔
locale_windoww w′ ∧ ∀other, Inother locale_categories → category ≠ 6 → other ≠ category → other ≠ 6 → locale_textw′ other = locale_textw other ∧ category ≠ 0 → category ≠ 6 → locale_codecw′ = locale_codecw

Retained names, read spans and roots inherit only private own capabilities or born objects, not the setter input or aux-loaded caller authority. Apply this to all three to prevent laundering on a later call, including through a zero-sized root. Ordinary transient effects still use locale_sources; exclusive releases stay separate.

145Definition locale_delegatesxs : listword m : mem w born m′ w′ : Prop ≔
∀root, Inroot locale_rootsw′ → locale_retained_capw born ptr_capspan_ptrroot ∧ ∀a, span_containsroot a → write_authoritylocale_rootsw born m′ a ∧ ∀category, Incategory locale_categories → locale_retained_capw born ptr_caplocale_namew′ category ∧ ∀source, Insource locale_readsw′ → locale_retained_capw born ptr_capspan_ptrsource ∧ ∀base, Inbase locale_ownedw′ → Inbase locale_ownedw ++ born ∧ locale_heapm′ base

The entire next private pool, not just this call's returned name, has private provenance. Clients apply object-level separation and fresh-allocation facts to this lemma across repeated setters.

158Lemma locale_delegates_private
∀ xs m w born m′ w′ source
locale_delegatesxs m w born m′ w′
Explore proof 7 tactics

Initial goal

⊢
∀xs : listword m : mem w : locale_world born : listZ m′ : mem w′ : locale_world source : span, locale_delegatesxs m w born m′ w′ → Insource locale_private_sourcesw′ → locale_retained_capw born ptr_capspan_ptrsource

intros xs m w born m′ w′ source Hroots & Hnames & Hreads & _ Hin

xs :
listword
m :
born :
listZ
m′ :
source :
Hroots :
∀root : span, Inroot locale_rootsw′ → locale_retained_capw born ptr_capspan_ptrroot ∧ ∀a : Z, span_containsroot a → write_authoritylocale_rootsw born m′ a
Hnames :
∀category : Z, Incategory locale_categories → locale_retained_capw born ptr_caplocale_namew′ category
Hreads :
∀source : span, Insource locale_readsw′ → locale_retained_capw born ptr_capspan_ptrsource
Hin :

unfold locale_private_sources in Hin

xs :
listword
m :
born :
listZ
m′ :
source :
Hroots :
∀root : span, Inroot locale_rootsw′ → locale_retained_capw born ptr_capspan_ptrroot ∧ ∀a : Z, span_containsroot a → write_authoritylocale_rootsw born m′ a
Hnames :
∀category : Z, Incategory locale_categories → locale_retained_capw born ptr_caplocale_namew′ category
Hreads :
∀source : span, Insource locale_readsw′ → locale_retained_capw born ptr_capspan_ptrsource
Hin :

apply in_app_or in Hin as Hin | Hin

2 open

xs :
listword
m :
born :
listZ
m′ :
source :
Hroots :
∀root : span, Inroot locale_rootsw′ → locale_retained_capw born ptr_capspan_ptrroot ∧ ∀a : Z, span_containsroot a → write_authoritylocale_rootsw born m′ a
Hnames :
∀category : Z, Incategory locale_categories → locale_retained_capw born ptr_caplocale_namew′ category
Hreads :
∀source : span, Insource locale_readsw′ → locale_retained_capw born ptr_capspan_ptrsource
Hin :
Insource locale_readsw′ ++ locale_rootsw′
focused goal
xs :
listword
m :
born :
listZ
m′ :
source :
Hroots :
∀root : span, Inroot locale_rootsw′ → locale_retained_capw born ptr_capspan_ptrroot ∧ ∀a : Z, span_containsroot a → write_authoritylocale_rootsw born m′ a
Hnames :
∀category : Z, Incategory locale_categories → locale_retained_capw born ptr_caplocale_namew′ category
Hreads :
∀source : span, Insource locale_readsw′ → locale_retained_capw born ptr_capspan_ptrsource
Hin :

–apply in_app_or in Hin as Hin | Hin ; apply Hreads | apply proj1Hrootssource Hin ; auto

deferred goal
xs :
listword
m :
born :
listZ
m′ :
source :
Hroots :
∀root : span, Inroot locale_rootsw′ → locale_retained_capw born ptr_capspan_ptrroot ∧ ∀a : Z, span_containsroot a → write_authoritylocale_rootsw born m′ a
Hnames :
∀category : Z, Incategory locale_categories → locale_retained_capw born ptr_caplocale_namew′ category
Hreads :
∀source : span, Insource locale_readsw′ → locale_retained_capw born ptr_capspan_ptrsource
Hin :

–apply in_map_iff in Hin as category & ← & Hcat

xs :
listword
m :
born :
listZ
m′ :
Hroots :
∀root : span, Inroot locale_rootsw′ → locale_retained_capw born ptr_capspan_ptrroot ∧ ∀a : Z, span_containsroot a → write_authoritylocale_rootsw born m′ a
Hnames :
∀category : Z, Incategory locale_categories → locale_retained_capw born ptr_caplocale_namew′ category
Hreads :
∀source : span, Insource locale_readsw′ → locale_retained_capw born ptr_capspan_ptrsource
category :
Z
Hcat :

apply Hnames

xs :
listword
m :
born :
listZ
m′ :
Hroots :
∀root : span, Inroot locale_rootsw′ → locale_retained_capw born ptr_capspan_ptrroot ∧ ∀a : Z, span_containsroot a → write_authoritylocale_rootsw born m′ a
Hnames :
∀category : Z, Incategory locale_categories → locale_retained_capw born ptr_caplocale_namew′ category
Hreads :
∀source : span, Insource locale_readsw′ → locale_retained_capw born ptr_capspan_ptrsource
category :
Z
Hcat :
⊢

exact Hcat

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros xs m w born m′ w′ source Hroots & Hnames & Hreads & _ Hin
apply in_app_or in Hin as Hin | Hin
–apply in_app_or in Hin as Hin | Hin ; apply Hreads | apply proj1Hrootssource Hin ; auto
–apply in_map_iff in Hin as category & ← & Hcat
apply Hnames
exact Hcat

Silent logical segment endpoints, NOT arbitrary native instruction cutpoints: setname can free before installing a replacement. Native allocation/resource/safepoint coverage needs an in-progress view. Serialized coherent locale/environment access remains trusted.

172Definition setlocale_prefixrep xs m w born trace : listevent m′ w′ : Prop ≔
trace = [ ]
∧
→
born = [ ] ∧ m′ = m ∧ w′ = w
else
locale_readyrep m′ w′ ∧ locale_delegatesxs m w born m′ w′ ∧ ∃category p, xs = WIntcategory; WPtrp ∧ locale_unchangedw w′ ∨ locale_selectedcategory w w′

Queries return exactly the current name, never NULL at an admitted initialized category. Setters may refuse, or return the new current category's readable borrowed name. Neither path transfers ownership.

182Definition setlocale_postxs : listword m : mem w : locale_world born : listZ trace : listevent ending : call_end m′ : mem w′ : locale_world : Prop ≔
∃ category p  ,
xs = WIntcategory; WPtrp
∧
→
ending = CallReturnWPtrlocale_namew category
else
ending = CallReturnWPtrmkPtr0 CNone ∧ locale_unchangedw w′ ∨ ending = CallReturnWPtrlocale_namew′ category ∧ locale_selectedcategory w w′

The complete trusted call contract. Allocation policy is explicit; refusal as NULL and terminal runtime resource endings stay distinct.

192Definition setlocale_contractrep requests : contractlocale_world ≔
mkContractlocale_world RClassP setlocale_abi setlocale_prerep locale_sources λxs _ w ⇒ locale_writesxs w λxs _ w ⇒ locale_releasesxs w λxs m w align size ⇒ locale_queryxs = false ∧ requestsxs m w align size setlocale_prefixrep setlocale_post resource_reason λwhy ⇒ Inwhy NullCapability; OutOfBounds; Misaligned; Readonly; ArgumentSize; ReturnSize

The identity evolution retains the logical locale and its window.

200Lemma locale_unchanged_refl
Explore proof 2 tactics

Initial goal

intros w

repeat split ; reflexivity

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros w
repeat split ; reflexivity

Current names are explicit sources, not unexplained return authority.

204Lemma locale_retained_available
∀ xs m w born m′ c
available_caplocale_sourcesxs m w born m′ c
Explore proof 14 tactics

Initial goal

⊢
∀xs : listword m : mem w : locale_world born : listZ m′ : mem c : cap, locale_retained_capw born c → available_caplocale_sourcesxs m w born m′ c

intros xs m w born m′ c base & Hin & Hcap | source & Hin & Hcap

2 open

xs :
listword
m :
born :
listZ
m′ :
c :
base :
Z
Hin :
Inbase born
Hcap :
c = Objbase ∨ c = Robase
⊢
available_caplocale_sourcesxs m w born m′ c
focused goal
xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
available_caplocale_sourcesxs m w born m′ c

–right

2 open

xs :
listword
m :
born :
listZ
m′ :
c :
base :
Z
Hin :
Inbase born
Hcap :
c = Objbase ∨ c = Robase
⊢
∃s : span, Ins locale_sourcesxs m w ∧ c = ptr_capspan_ptrs ∨ ∃s : span a : Z, Ins locale_sourcesxs m w ∧ span_containss a ∧ a + 8 ≤ ptr_addrspan_ptrs + span_sizes ∧ access_resm′ a ptr_capspan_ptrs 8 Read 8 = Someok ∧ c = m_auxm′ a ∨ ∃base0 : Z, Inbase0 born ∧ c = Objbase0 ∨ c = Robase0
deferred goal
xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
available_caplocale_sourcesxs m w born m′ c

right

2 open

xs :
listword
m :
born :
listZ
m′ :
c :
base :
Z
Hin :
Inbase born
Hcap :
c = Objbase ∨ c = Robase
⊢
∃s : span a : Z, Ins locale_sourcesxs m w ∧ span_containss a ∧ a + 8 ≤ ptr_addrspan_ptrs + span_sizes ∧ access_resm′ a ptr_capspan_ptrs 8 Read 8 = Someok ∧ c = m_auxm′ a ∨ ∃base0 : Z, Inbase0 born ∧ c = Objbase0 ∨ c = Robase0
deferred goal
xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
available_caplocale_sourcesxs m w born m′ c

right

2 open

xs :
listword
m :
born :
listZ
m′ :
c :
base :
Z
Hin :
Inbase born
Hcap :
c = Objbase ∨ c = Robase
⊢
∃base0 : Z, Inbase0 born ∧ c = Objbase0 ∨ c = Robase0
deferred goal
xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
available_caplocale_sourcesxs m w born m′ c

exists base

2 open

xs :
listword
m :
born :
listZ
m′ :
c :
base :
Z
Hin :
Inbase born
Hcap :
c = Objbase ∨ c = Robase
⊢
Inbase born ∧ c = Objbase ∨ c = Robase
deferred goal
xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
available_caplocale_sourcesxs m w born m′ c

auto

deferred goal
xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
available_caplocale_sourcesxs m w born m′ c

–right

xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
∃s : span, Ins locale_sourcesxs m w ∧ c = ptr_capspan_ptrs ∨ ∃s : span a : Z, Ins locale_sourcesxs m w ∧ span_containss a ∧ a + 8 ≤ ptr_addrspan_ptrs + span_sizes ∧ access_resm′ a ptr_capspan_ptrs 8 Read 8 = Someok ∧ c = m_auxm′ a ∨ ∃base : Z, Inbase born ∧ c = Objbase ∨ c = Robase

left

xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
∃s : span, Ins locale_sourcesxs m w ∧ c = ptr_capspan_ptrs

exists source

xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
Insource locale_sourcesxs m w ∧ c = ptr_capspan_ptrsource

split ; | exact Hcap

xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
Insource locale_sourcesxs m w

unfold locale_sources

xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
Insource
++
match xs with
⇒
→
[ ]
else
span_ptr ≔ p; span_size ≔ string_lengthm p + 1
WInt_ :: WPtrp :: _ :: _
⇒
[ ]
_
⇒
[ ]

apply in_or_app

xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource
⊢
∨
Insource
match xs with
⇒
→
[ ]
else
span_ptr ≔ p; span_size ≔ string_lengthm p + 1
WInt_ :: WPtrp :: _ :: _
⇒
[ ]
_
⇒
[ ]

left

xs :
listword
m :
born :
listZ
m′ :
c :
source :
Hin :
Hcap :
c = ptr_capspan_ptrsource

exact Hin

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros xs m w born m′ c base & Hin & Hcap | source & Hin & Hcap
–right
right
right
exists base
auto
–right
left
exists source
split ; | exact Hcap
apply in_or_app
left
exact Hin
213Lemma locale_name_retained
∀ w born category
Explore proof 9 tactics

Initial goal

⊢
∀w : locale_world born : listZ category : Z, Incategory locale_categories → locale_retained_capw born ptr_caplocale_namew category

intros w born category Hcategory

born :
listZ
category :
Z
Hcategory :

right

born :
listZ
category :
Z
Hcategory :
⊢
∃source : span, Insource locale_private_sourcesw ∧ ptr_caplocale_namew category = ptr_capspan_ptrsource

exists locale_name_spanw category

born :
listZ
category :
Z
Hcategory :

split ; | reflexivity

born :
listZ
category :
Z
Hcategory :

unfold locale_private_sources

born :
listZ
category :
Z
Hcategory :

apply in_or_app

born :
listZ
category :
Z
Hcategory :

right

born :
listZ
category :
Z
Hcategory :

apply in_map

born :
listZ
category :
Z
Hcategory :
⊢

exact Hcategory

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros w born category Hcategory
right
exists locale_name_spanw category
split ; | reflexivity
apply in_or_app
right
apply in_map
exact Hcategory
221Lemma locale_name_available
∀ xs m w born category
Explore proof 4 tactics

Initial goal

⊢
∀xs : listword m : mem w : locale_world born : listZ category : Z, Incategory locale_categories → available_caplocale_sourcesxs m w born m ptr_caplocale_namew category

intros xs m w born category Hcategory

xs :
listword
m :
born :
listZ
category :
Z
Hcategory :

apply locale_retained_available

xs :
listword
m :
born :
listZ
category :
Z
Hcategory :

apply locale_name_retained

xs :
listword
m :
born :
listZ
category :
Z
Hcategory :
⊢

exact Hcategory

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros xs m w born category Hcategory
exact Hcategory

An unchanged represented world requires no newly delegated authority.

230Lemma locale_delegates_refl
∀ rep xs m w
locale_delegatesxs m w [ ] m w
Explore proof 38 tactics

Initial goal

⊢
∀rep : mem → locale_world → Prop xs : listword m : mem w : locale_world, locale_readyrep m w → locale_delegatesxs m w [ ] m w

intros rep xs m w _ & Hroots & _ & Hreads & Howned & _

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
locale_delegatesxs m w [ ] m w

split

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀root : span, Inroot locale_rootsw → locale_retained_capw [ ] ptr_capspan_ptrroot ∧ ∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
focused goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

–intros root Hin

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

split

3 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
focused goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

+right

3 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∃source : span, Insource locale_private_sourcesw ∧ ptr_capspan_ptrroot = ptr_capspan_ptrsource
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

exists root

3 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

split ; | reflexivity

3 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

unfold locale_private_sources

3 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

apply in_or_app

3 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

left

3 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

apply in_or_app

3 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
Inroot locale_readsw ∨ Inroot locale_rootsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

right

3 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
Inroot locale_rootsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

exact Hin

2 open

deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
⊢
∀a : Z, span_containsroot a → write_authoritylocale_rootsw [ ] m a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

+intros a Ha

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
a :
Z
Ha :
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

left

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
a :
Z
Ha :
⊢
∃s : span, Ins locale_rootsw ∧ writable_spanm s ∧ span_containss a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

exists root

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
a :
Z
Ha :
⊢
Inroot locale_rootsw ∧ writable_spanm root ∧ span_containsroot a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

split ; exact Hin |

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
a :
Z
Ha :
⊢
writable_spanm root ∧ span_containsroot a
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

split ; | exact Ha

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
a :
Z
Ha :
⊢
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

rewrite Forall_forall in Hroots

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
∀x : span, Inx locale_rootsw → writable_spanm x
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
a :
Z
Ha :
⊢
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

apply Hroots

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
∀x : span, Inx locale_rootsw → writable_spanm x
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
root :
Hin :
Inroot locale_rootsw
a :
Z
Ha :
⊢
Inroot locale_rootsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

exact Hin

deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀category : Z, Incategory locale_categories → locale_retained_capw [ ] ptr_caplocale_namew category ∧ ∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

–split ; intros ; apply locale_name_retained ; assumption |

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource ∧ ∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

split

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀source : span, Insource locale_readsw → locale_retained_capw [ ] ptr_capspan_ptrsource
focused goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

+intros source Hin

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
source :
Hin :
Insource locale_readsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

right

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
source :
Hin :
Insource locale_readsw
⊢
∃source0 : span, Insource0 locale_private_sourcesw ∧ ptr_capspan_ptrsource = ptr_capspan_ptrsource0
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

exists source

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
source :
Hin :
Insource locale_readsw
⊢
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

split ; | reflexivity

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
source :
Hin :
Insource locale_readsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

unfold locale_private_sources

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
source :
Hin :
Insource locale_readsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

apply in_or_app

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
source :
Hin :
Insource locale_readsw
⊢
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

left

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
source :
Hin :
Insource locale_readsw
⊢
Insource locale_readsw ++ locale_rootsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

apply in_or_app

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
source :
Hin :
Insource locale_readsw
⊢
Insource locale_readsw ∨ Insource locale_rootsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

left

2 open

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
source :
Hin :
Insource locale_readsw
⊢
Insource locale_readsw
deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

exact Hin

deferred goal
rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
⊢
∀base : Z, Inbase locale_ownedw → Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

+intros base Hin

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
base :
Z
Hin :
Inbase locale_ownedw
⊢
Inbase locale_ownedw ++ [ ] ∧ locale_heapm base

split ; apply in_or_app ; left ; exact Hin |

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
base :
Z
Hin :
Inbase locale_ownedw
⊢

rewrite Forall_forall in Howned

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
∀x : Z, Inx locale_ownedw → locale_heapm x
base :
Z
Hin :
Inbase locale_ownedw
⊢

apply Howned

rep :
mem → locale_world → Prop
xs :
listword
m :
Hroots :
Hreads :
Forallλsource : span ⇒ readable_bytesm span_ptrsource span_sizesource locale_readsw
Howned :
∀x : Z, Inx locale_ownedw → locale_heapm x
base :
Z
Hin :
Inbase locale_ownedw
⊢
Inbase locale_ownedw

exact Hin

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros rep xs m w _ & Hroots & _ & Hreads & Howned & _
split
–intros root Hin
split
+right
exists root
split ; | reflexivity
apply in_or_app
left
apply in_or_app
right
exact Hin
+intros a Ha
left
exists root
split ; exact Hin |
split ; | exact Ha
rewrite Forall_forall in Hroots
apply Hroots
exact Hin
–split ; intros ; apply locale_name_retained ; assumption |
split
+intros source Hin
right
exists source
split ; | reflexivity
apply in_or_app
left
apply in_or_app
left
exact Hin
+intros base Hin
split ; apply in_or_app ; left ; exact Hin |
rewrite Forall_forall in Howned
apply Howned
exact Hin

A retained epoch preserves exact borrowed pointers, contents and codec interpretation. No such transport is offered after a change.

248Theorem locale_borrow_preserved
∀ rep m′ w w′ category
c_stringm′ locale_namew category locale_textw category ∧ locale_codecw′ = locale_codecw
Explore proof 3 tactics

Initial goal

⊢
∀rep : mem → locale_world → Prop m′ : mem w w′ : locale_world category : Z, locale_windoww w′ → locale_epochw′ = locale_epochw → locale_readyrep m′ w′ → Incategory locale_categories → c_stringm′ locale_namew category locale_textw category ∧ locale_codecw′ = locale_codecw

intros rep m′ w w′ category He Hp Ht Hcodec | He Hsame _ & _ & Hnames & _ Hcat

2 open

rep :
mem → locale_world → Prop
m′ :
w, w′ :
category :
Z
Hcodec :
Hsame :
Hnames :
∀category : Z, Incategory locale_categories → ptr_addrlocale_namew′ category ≠ 0 ∧ c_stringm′ locale_namew′ category locale_textw′ category
Hcat :
⊢
c_stringm′ locale_namew category locale_textw category ∧ locale_codecw′ = locale_codecw
focused goal
rep :
mem → locale_world → Prop
m′ :
w, w′ :
category :
Z
Hsame :
Hnames :
∀category : Z, Incategory locale_categories → ptr_addrlocale_namew′ category ≠ 0 ∧ c_stringm′ locale_namew′ category locale_textw′ category
Hcat :
⊢
c_stringm′ locale_namew category locale_textw category ∧ locale_codecw′ = locale_codecw

–split ; rewrite <- Hp , <- Ht ; exact proj2Hnamescategory Hcat | exact Hcodec

deferred goal
rep :
mem → locale_world → Prop
m′ :
w, w′ :
category :
Z
Hsame :
Hnames :
∀category : Z, Incategory locale_categories → ptr_addrlocale_namew′ category ≠ 0 ∧ c_stringm′ locale_namew′ category locale_textw′ category
Hcat :
⊢
c_stringm′ locale_namew category locale_textw category ∧ locale_codecw′ = locale_codecw

–lia

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros rep m′ w w′ category He Hp Ht Hcodec | He Hsame _ & _ & Hnames & _ Hcat
–split ; rewrite <- Hp , <- Ht ; exact proj2Hnamescategory Hcat | exact Hcodec
–lia

Call constructions and exact extraction over the caller's machine. A separately instantiated machine has different inductive types.

261Module LocaleOn R : Runtime M : ExternalMachineSigR
262Module E ≔ M.E

A null query is constructively inhabited from its independent represented input facts, with exact memory, world and runtime.

266Theorem setlocale_query_admitted
∀ rep requests r args category p s m w
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w [ ] CallReturnWPtrlocale_namew category s m w
Explore proof 28 tactics

Initial goal

⊢
∀rep : mem → locale_world → Prop requests : listword → mem → locale_world → Z → Z → Prop r : call_result args : listarg category : Z p : ptr s : R.state m : mem w : locale_world, setlocale_abir args → locale_readyrep m w → Incategory locale_categories → ptr_addrp = 0 → E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w [ ] CallReturnWPtrlocale_namew category s m w

intros rep requests r args category p s m w Habi Hready Hcat Hnull

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
⊢
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w [ ] CallReturnWPtrlocale_namew category s m w

assert Hquery : locale_queryWIntcategory; WPtrp = true

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
⊢
locale_queryWIntcategory; WPtrp = true
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w [ ] CallReturnWPtrlocale_namew category s m w

{unfold locale_query

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
⊢
ptr_addrp =? 0 = true
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w [ ] CallReturnWPtrlocale_namew category s m w

rewrite Hnull

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
⊢
0 =? 0 = true
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w [ ] CallReturnWPtrlocale_namew category s m w

reflexivity

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w [ ] CallReturnWPtrlocale_namew category s m w

eapply E.invoke_normal with born := [ ]

7 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_presetlocale_contractrep requests WIntcategory; WPtrp m w
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
E.prefixsetlocale_contractrep requests WIntcategory; WPtrp s m w [ ] [ ] s m w
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_postsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] CallReturnWPtrlocale_namew category m w
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

–exact Habi

6 open

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_presetlocale_contractrep requests WIntcategory; WPtrp m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
E.prefixsetlocale_contractrep requests WIntcategory; WPtrp s m w [ ] [ ] s m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_postsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] CallReturnWPtrlocale_namew category m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

–split ; exact Hready |

6 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∃category0 : Z p0 : ptr, WIntcategory; WPtrp = WIntcategory0; WPtrp0 ∧ Incategory0 locale_categories ∧ ptr_addrp0 = 0 ∨ ∃bytes : listZ, c_stringm p0 bytes
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
E.prefixsetlocale_contractrep requests WIntcategory; WPtrp s m w [ ] [ ] s m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_postsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] CallReturnWPtrlocale_namew category m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

exists category, p

6 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
WIntcategory; WPtrp = WIntcategory; WPtrp ∧ Incategory locale_categories ∧ ptr_addrp = 0 ∨ ∃bytes : listZ, c_stringm p bytes
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
E.prefixsetlocale_contractrep requests WIntcategory; WPtrp s m w [ ] [ ] s m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_postsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] CallReturnWPtrlocale_namew category m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

auto

5 open

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
E.prefixsetlocale_contractrep requests WIntcategory; WPtrp s m w [ ] [ ] s m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_postsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] CallReturnWPtrlocale_namew category m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

–split ; constructor |

5 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_prefixsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_postsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] CallReturnWPtrlocale_namew category m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

split ; reflexivity |

5 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
→
[ ] = [ ] ∧ m = m ∧ w = w
else
locale_readyrep m w ∧ locale_delegatesWIntcategory; WPtrp m w [ ] m w ∧ ∃category0 : Z p0 : ptr, WIntcategory; WPtrp = WIntcategory0; WPtrp0 ∧ locale_unchangedw w ∨ locale_selectedcategory0 w w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_postsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] CallReturnWPtrlocale_namew category m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

rewrite Hquery

5 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
[ ] = [ ] ∧ m = m ∧ w = w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_postsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] CallReturnWPtrlocale_namew category m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

auto

4 open

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
contract_postsetlocale_contractrep requests WIntcategory; WPtrp m w [ ] [ ] CallReturnWPtrlocale_namew category m w
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

–exists category, p

4 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
WIntcategory; WPtrp = WIntcategory; WPtrp
∧
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

split ; reflexivity |

4 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

rewrite Hquery

4 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

reflexivity

3 open

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀why : reason, CallReturnWPtrlocale_namew category ≠ CallResourcewhy
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

–intros why Hbad

3 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
why :
⊢
False
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

discriminate

2 open

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀values : listword, CallReturnWPtrlocale_namew category = CallReturnvalues → return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

–intros values Heq

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
values :
listword
Heq :
⊢
return_shapecontract_returnssetlocale_contractrep requests values ∧ Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m values
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

injection Heq as ←

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

split

3 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m WPtrlocale_namew category
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

+eexists

4 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
WPtrlocale_namew category = ?x ∧ word_at_classP ?x = Some?x
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m WPtrlocale_namew category
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus
shelved goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢

split ; reflexivity

2 open

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
Forallword_authoritycontract_sourcessetlocale_contractrep requests WIntcategory; WPtrp m w [ ] m WPtrlocale_namew category
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

+constructor ; apply locale_name_available ; exact Hcat | constructor

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
∀status : Z, CallReturnWPtrlocale_namew category = CallExitstatus → ∃before : listevent, [ ] = before ++ ProcessExitstatus

–intros status Hbad

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
Habi :
Hready :
Hcat :
Hnull :
ptr_addrp = 0
Hquery :
locale_queryWIntcategory; WPtrp = true
status :
Z
Hbad :
⊢
∃before : listevent, [ ] = before ++ ProcessExitstatus

discriminate

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros rep requests r args category p s m w Habi Hready Hcat Hnull
assert Hquery : locale_queryWIntcategory; WPtrp = true
{unfold locale_query
rewrite Hnull
reflexivity
eapply E.invoke_normal with born := [ ]
–exact Habi
–split ; exact Hready |
exists category, p
auto
–split ; constructor |
split ; reflexivity |
rewrite Hquery
auto
–exists category, p
split ; reflexivity |
rewrite Hquery
reflexivity
–intros why Hbad
discriminate
–intros values Heq
injection Heq as ←
split
+eexists
split ; reflexivity
+constructor ; apply locale_name_available ; exact Hcat | constructor
–intros status Hbad
discriminate

A setter's ordinary refusal is possible without allocations or input mutation. This is conservative specification nonvacuity, not a claim that native selection always fails or always returns.

290Theorem setlocale_refusal_admitted
∀ rep requests r args category p bytes s m w
ptr_addrp ≠ 0
c_stringm p bytes
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w [ ] CallReturnWPtrmkPtr0 CNone s m w
Proof 35 steps Qed
intros rep requests r args category p bytes s m w Habi Hready Hcat Hnonnull Hstr
assert Hquery : locale_queryWIntcategory; WPtrp = false by apply Z.eqb_neq ; exact Hnonnull
eapply E.invoke_normal with born := [ ]
–exact Habi
–split ; exact Hready |
exists category, p
split ; reflexivity |
split ; exact Hcat |
right
exists bytes
exact Hstr
–split ; constructor |
split ; reflexivity |
rewrite Hquery
split ; exact Hready |
split ; eapply locale_delegates_refl ; exact Hready |
exists category, p
split ; reflexivity |
left
–exists category, p
split ; reflexivity |
rewrite Hquery
left
split ; reflexivity | apply locale_unchanged_refl
–intros why Hbad
discriminate
–intros values Heq
injection Heq as ←
split
+eexists
split ; reflexivity
+constructor ; left ; reflexivity | constructor
–intros status Hbad
discriminate

Successful selection is inhabited from an independent effects path, represented result and delegated authority, not assumed merely because the arguments were admitted.

318Theorem setlocale_success_admitted
∀ rep requests r args category p bytes s m w born s′ m′ w′
ptr_addrp ≠ 0
c_stringm p bytes
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_rootsw locale_ownedw λalign size ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
locale_readyrep m′ w′
locale_delegatesWIntcategory; WPtrp m w born m′ w′
locale_selectedcategory w w′
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w [ ] CallReturnWPtrlocale_namew′ category s′ m′ w′
Proof 40 steps Qed
intros rep requests r args category p bytes s m w born s′ m′ w′ Habi Hready Hcat Hnonnull Hstr He Hr′ Hd Hselected
assert Hquery : locale_queryWIntcategory; WPtrp = false by apply Z.eqb_neq ; exact Hnonnull
eapply E.invoke_normal with born := born
–exact Habi
–split ; exact Hready |
exists category, p
split ; reflexivity |
split ; exact Hcat |
right
exists bytes
exact Hstr
–split
+change E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s' m' born
rewrite Hquery
rewrite Hquery in He
exact He
+split ; reflexivity |
rewrite Hquery
split ; exact Hr' |
split ; exact Hd |
exists category, p
split ; reflexivity |
right
exact Hselected
–exists category, p
split ; reflexivity |
rewrite Hquery
right
auto
–intros why Hbad
discriminate
–intros values Heq
injection Heq as ←
split
+eexists
split ; reflexivity
+constructor ; apply locale_retained_available ; apply proj1proj2Hd ; exact Hcat | constructor
–intros status Hbad
discriminate

Every completion exposes the exact trace/world/effect endpoint; queries cannot allocate, fail for resources or change the snapshot. For setters, callers frame their pieces with the existing effects rules using roots_apart and exclusive-release separation.

359Theorem setlocale_invocation
∀ rep requests r args xs s m w trace ending s′ m′ w′
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′
setlocale_prerep xs m w
∧
trace = [ ]
∧
∃ born  ,
E.effectslocale_sourcesxs m w locale_writesxs w locale_releasesxs w λalign size ⇒ locale_queryxs = false ∧ requestsxs m w align size s m [ ] s′ m′ born
∧
→
born = [ ] ∧ m′ = m ∧ w′ = w ∧ ∃category p, xs = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namew category
else
locale_readyrep m′ w′ ∧ locale_delegatesxs m w born m′ w′ ∧ setlocale_postxs m w born trace ending m′ w′ ∨ ∃why, ending = CallResourcewhy ∧ E.resource_failureλalign size ⇒ locale_queryxs = false ∧ requestsxs m w align size s′ why ∧ resource_reasonwhy
Proof 31 steps Qed
intros rep requests r args xs s m w trace ending s′ m′ w′ Hcall
destruct Hcall as trace ending s′ m′ w′ born Habi Hpre He Ht Hp Hpost Hresource Hvalues Hexit | why trace s′ m′ w′ born Habi Hpre He Ht Hp Hfailure Hresource
–split ; exact Hpre |
split ; exact Ht |
exists born
split ; exact He |
destruct locale_queryxs eqn: Hquery
+destruct Hp as Hb & Hm & Hw
repeat split ; try assumption
destruct Hpost as category & p & Hxs & Hresult
rewrite Hquery in Hresult
exists category, p
auto
+destruct Hp as Hr & Hd & _
auto
–split ; exact Hpre |
split ; exact Ht |
exists born
split ; exact He |
destruct locale_queryxs eqn: Hquery
+inversion Hfailure as align size Hrequest Hsize Hrefuse | align size Hrequest Hsize ; subst ; destruct Hrequest as Hnotquery _ ; rewrite Hquery in Hnotquery ; discriminate
+destruct Hp as Hr & Hd & _
split ; exact Hr |
split ; exact Hd |
right
exists why
split ; reflexivity |
split ; | exact Hresource
change E.resource_failureλalign size ⇒ locale_queryxs = false ∧ requestsxs m w align size s' why in Hfailure
rewrite Hquery in Hfailure
exact Hfailure

Queries, successful/refused setters and terminal resource endpoints all retain aligned current-name bases, through endpoint readiness.

395Theorem setlocale_invocation_aligned
∀ rep requests r args xs s m w trace ending s′ m′ w′
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′
Explore proof 8 tactics

Initial goal

⊢
∀rep : mem → locale_world → Prop requests : listword → mem → locale_world → Z → Z → Prop r : call_result args : listarg xs : listword s : R.state m : mem w : locale_world trace : listevent ending : call_end s′ : R.state m′ : mem w′ : locale_world, E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′ → locale_names_alignedw′

intros rep requests r args xs s m w trace ending s′ m′ w′ Hcall

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′

destruct setlocale_invocation_ _ _ _ _ _ _ _ _ _ _ _ _ Hcall as Hready _ & _ & born & _ & Hend

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′
Hready :
born :
listZ
Hend :
→
born = [ ] ∧ m′ = m ∧ w′ = w ∧ ∃category : Z p : ptr, xs = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namew category
else
locale_readyrep m′ w′ ∧ locale_delegatesxs m w born m′ w′ ∧ setlocale_postxs m w born trace ending m′ w′ ∨ ∃why : reason, ending = CallResourcewhy ∧ E.resource_failureλalign size : Z ⇒ locale_queryxs = false ∧ requestsxs m w align size s′ why ∧ resource_reasonwhy

destruct locale_queryxs

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′
Hready :
born :
listZ
Hend :
born = [ ] ∧ m′ = m ∧ w′ = w ∧ ∃category : Z p : ptr, xs = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namew category
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′
Hready :
born :
listZ
Hend :
locale_readyrep m′ w′ ∧ locale_delegatesxs m w born m′ w′ ∧ setlocale_postxs m w born trace ending m′ w′ ∨ ∃why : reason, ending = CallResourcewhy ∧ E.resource_failureλalign size : Z ⇒ false = false ∧ requestsxs m w align size s′ why ∧ resource_reasonwhy

–destruct Hend as _ & _ & → & _

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w
Hready :
born :
listZ
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′
Hready :
born :
listZ
Hend :
locale_readyrep m′ w′ ∧ locale_delegatesxs m w born m′ w′ ∧ setlocale_postxs m w born trace ending m′ w′ ∨ ∃why : reason, ending = CallResourcewhy ∧ E.resource_failureλalign size : Z ⇒ false = false ∧ requestsxs m w align size s′ why ∧ resource_reasonwhy

destruct Hready as _ & _ & _ & _ & _ & Haligned

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w
born :
listZ
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′
Hready :
born :
listZ
Hend :
locale_readyrep m′ w′ ∧ locale_delegatesxs m w born m′ w′ ∧ setlocale_postxs m w born trace ending m′ w′ ∨ ∃why : reason, ending = CallResourcewhy ∧ E.resource_failureλalign size : Z ⇒ false = false ∧ requestsxs m w align size s′ why ∧ resource_reasonwhy

exact Haligned

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′
Hready :
born :
listZ
Hend :
locale_readyrep m′ w′ ∧ locale_delegatesxs m w born m′ w′ ∧ setlocale_postxs m w born trace ending m′ w′ ∨ ∃why : reason, ending = CallResourcewhy ∧ E.resource_failureλalign size : Z ⇒ false = false ∧ requestsxs m w align size s′ why ∧ resource_reasonwhy

–destruct Hend as _ & _ & _ & _ & _ & Haligned _

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
xs :
listword
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hcall :
E.invokesetlocale_contractrep requests r args xs s m w trace ending s′ m′ w′
Hready :
born :
listZ
Haligned :

exact Haligned

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros rep requests r args xs s m w trace ending s′ m′ w′ Hcall
destruct setlocale_invocation_ _ _ _ _ _ _ _ _ _ _ _ _ Hcall as Hready _ & _ & born & _ & Hend
destruct locale_queryxs
–destruct Hend as _ & _ & → & _
destruct Hready as _ & _ & _ & _ & _ & Haligned
exact Haligned
–destruct Hend as _ & _ & _ & _ & _ & Haligned _
exact Haligned

The pure-query runtime cannot advance through an allocation; all query completions have exactly the starting runtime state too.

410Theorem setlocale_query_invocation
∀ rep requests r args category p s m w trace ending s′ m′ w′
ptr_addrp = 0
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category
Explore proof 16 tactics

Initial goal

⊢
∀rep : mem → locale_world → Prop requests : listword → mem → locale_world → Z → Z → Prop r : call_result args : listarg category : Z p : ptr s : R.state m : mem w : locale_world trace : listevent ending : call_end s′ : R.state m′ : mem w′ : locale_world, ptr_addrp = 0 → E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′ → trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

intros rep requests r args category p s m w trace ending s′ m′ w′ Hnull Hcall

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
⊢
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

assert Hquery : locale_queryWIntcategory; WPtrp = true

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
⊢
locale_queryWIntcategory; WPtrp = true
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

{unfold locale_query

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
⊢
ptr_addrp =? 0 = true
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

rewrite Hnull

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
⊢
0 =? 0 = true
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

reflexivity

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
⊢
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

destruct setlocale_invocation_ _ _ _ _ _ _ _ _ _ _ _ _ Hcall as Hpre & Htrace & born & He & Hresult

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hresult :
→
born = [ ] ∧ m′ = m ∧ w′ = w ∧ ∃category0 : Z p0 : ptr, WIntcategory; WPtrp = WIntcategory0; WPtrp0 ∧ ending = CallReturnWPtrlocale_namew category0
else
locale_readyrep m′ w′ ∧ locale_delegatesWIntcategory; WPtrp m w born m′ w′ ∧ setlocale_postWIntcategory; WPtrp m w born trace ending m′ w′ ∨ ∃why : reason, ending = CallResourcewhy ∧ E.resource_failureλalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s′ why ∧ resource_reasonwhy
⊢
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

rewrite Hquery in Hresult

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hresult :
born = [ ] ∧ m′ = m ∧ w′ = w ∧ ∃category0 : Z p0 : ptr, WIntcategory; WPtrp = WIntcategory0; WPtrp0 ∧ ending = CallReturnWPtrlocale_namew category0
⊢
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

destruct Hresult as Hb & Hm & Hw & cat & q & Hxs & Hend

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hb :
born = [ ]
Hm :
m′ = m
Hw :
w′ = w
cat :
Z
q :
Hxs :
WIntcategory; WPtrp = WIntcat; WPtrq
Hend :
⊢
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

injection Hxs as ← Hp

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hb :
born = [ ]
Hm :
m′ = m
Hw :
w′ = w
q :
Hp :
p = q
Hend :
ending = CallReturnWPtrlocale_namew category
⊢
trace = [ ] ∧ s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

split ; exact Htrace |

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hb :
born = [ ]
Hm :
m′ = m
Hw :
w′ = w
q :
Hp :
p = q
Hend :
ending = CallReturnWPtrlocale_namew category
⊢
s′ = s ∧ m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

split

2 open

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hb :
born = [ ]
Hm :
m′ = m
Hw :
w′ = w
q :
Hp :
p = q
Hend :
ending = CallReturnWPtrlocale_namew category
⊢
s′ = s
focused goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hb :
born = [ ]
Hm :
m′ = m
Hw :
w′ = w
q :
Hp :
p = q
Hend :
ending = CallReturnWPtrlocale_namew category
⊢
m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

–clear - He Hquery

2 open

requests :
listword → mem → locale_world → Z → Z → Prop
category :
Z
p :
s :
R.state
m :
s′ :
R.state
m′ :
Hquery :
locale_queryWIntcategory; WPtrp = true
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
⊢
s′ = s
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hb :
born = [ ]
Hm :
m′ = m
Hw :
w′ = w
q :
Hp :
p = q
Hend :
ending = CallReturnWPtrlocale_namew category
⊢
m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

induction He ; reflexivity | exact IHHe |

2 open

requests :
listword → mem → locale_world → Z → Z → Prop
category :
Z
p :
m :
Hquery :
locale_queryWIntcategory; WPtrp = true
s :
R.state
m0 :
born :
listZ
align, size, base :
Z
s1, s′ :
R.state
m′ :
born′ :
listZ
H :
locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size
H0 :
0 ≤ size ≤ max_allocation_size
H1 :
R.allocs heap_reqalign size = Somebase, s1
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s1 allocatedm0 heap_reqalign size base base :: born s′ m′ born′
IHHe :
s′ = s1
⊢
s′ = s
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hb :
born = [ ]
Hm :
m′ = m
Hw :
w′ = w
q :
Hp :
p = q
Hend :
ending = CallReturnWPtrlocale_namew category
⊢
m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

destruct H as Hfalse _

2 open

requests :
listword → mem → locale_world → Z → Z → Prop
category :
Z
p :
m :
Hquery :
locale_queryWIntcategory; WPtrp = true
s :
R.state
m0 :
born :
listZ
align, size, base :
Z
s1, s′ :
R.state
m′ :
born′ :
listZ
Hfalse :
locale_queryWIntcategory; WPtrp = false
H0 :
0 ≤ size ≤ max_allocation_size
H1 :
R.allocs heap_reqalign size = Somebase, s1
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s1 allocatedm0 heap_reqalign size base base :: born s′ m′ born′
IHHe :
s′ = s1
⊢
s′ = s
deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hb :
born = [ ]
Hm :
m′ = m
Hw :
w′ = w
q :
Hp :
p = q
Hend :
ending = CallReturnWPtrlocale_namew category
⊢
m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

congruence

deferred goal
rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p :
s :
R.state
m :
trace :
listevent
ending :
s′ :
R.state
m′ :
Hnull :
ptr_addrp = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace ending s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = true
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hb :
born = [ ]
Hm :
m′ = m
Hw :
w′ = w
q :
Hp :
p = q
Hend :
ending = CallReturnWPtrlocale_namew category
⊢
m′ = m ∧ w′ = w ∧ ending = CallReturnWPtrlocale_namew category

–auto

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros rep requests r args category p s m w trace ending s′ m′ w′ Hnull Hcall
assert Hquery : locale_queryWIntcategory; WPtrp = true
{unfold locale_query
rewrite Hnull
reflexivity
destruct setlocale_invocation_ _ _ _ _ _ _ _ _ _ _ _ _ Hcall as Hpre & Htrace & born & He & Hresult
rewrite Hquery in Hresult
destruct Hresult as Hb & Hm & Hw & cat & q & Hxs & Hend
injection Hxs as ← Hp
split ; exact Htrace |
split
–clear - He Hquery
induction He ; reflexivity | exact IHHe |
destruct H as Hfalse _
congruence
–auto

A setter result observed as NULL is ordinary refusal, not a successful locale change whose readable name happens to live at 0.

431Theorem setlocale_null_refusal
∀ rep requests r args category p q s m w trace s′ m′ w′
ptr_addrp ≠ 0
ptr_addrq = 0
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Explore proof 17 tactics

Initial goal

⊢
∀rep : mem → locale_world → Prop requests : listword → mem → locale_world → Z → Z → Prop r : call_result args : listarg category : Z p q : ptr s : R.state m : mem w : locale_world trace : listevent s′ : R.state m′ : mem w′ : locale_world, ptr_addrp ≠ 0 → ptr_addrq = 0 → E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′ → locale_unchangedw w′

intros rep requests r args category p q s m w trace s′ m′ w′ Hnonzero Hzero Hcall

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′

assert Hquery : locale_queryWIntcategory; WPtrp = false by apply Z.eqb_neq ; exact Hnonzero

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false

destruct setlocale_invocation_ _ _ _ _ _ _ _ _ _ _ _ _ Hcall as Hpre & Htrace & born & He & Hresult

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hresult :
→
born = [ ] ∧ m′ = m ∧ w′ = w ∧ ∃category0 : Z p0 : ptr, WIntcategory; WPtrp = WIntcategory0; WPtrp0 ∧ CallReturnWPtrq = CallReturnWPtrlocale_namew category0
else
locale_readyrep m′ w′ ∧ locale_delegatesWIntcategory; WPtrp m w born m′ w′ ∧ setlocale_postWIntcategory; WPtrp m w born trace CallReturnWPtrq m′ w′ ∨ ∃why : reason, CallReturnWPtrq = CallResourcewhy ∧ E.resource_failureλalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s′ why ∧ resource_reasonwhy

rewrite Hquery in Hresult

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hresult :
locale_readyrep m′ w′ ∧ locale_delegatesWIntcategory; WPtrp m w born m′ w′ ∧ setlocale_postWIntcategory; WPtrp m w born trace CallReturnWPtrq m′ w′ ∨ ∃why : reason, CallReturnWPtrq = CallResourcewhy ∧ E.resource_failureλalign size : Z ⇒ false = false ∧ requestsWIntcategory; WPtrp m w align size s′ why ∧ resource_reasonwhy

destruct Hresult as Hr & Hd & Hpost | why & Hbad & _ ; | discriminate Hbad

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
Hpre :
setlocale_prerep WIntcategory; WPtrp m w
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hr :
locale_readyrep m′ w′
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
Hpost :
setlocale_postWIntcategory; WPtrp m w born trace CallReturnWPtrq m′ w′

destruct Hpre as _ & cat & operand & Hxs & Hcat & _

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
cat :
Z
operand :
Hxs :
WIntcategory; WPtrp = WIntcat; WPtroperand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hr :
locale_readyrep m′ w′
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
Hpost :
setlocale_postWIntcategory; WPtrp m w born trace CallReturnWPtrq m′ w′

injection Hxs as ← Hp

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hr :
locale_readyrep m′ w′
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
Hpost :
setlocale_postWIntcategory; WPtrp m w born trace CallReturnWPtrq m′ w′

destruct Hpost as cat & operand′ & Hxs & Hpost

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hr :
locale_readyrep m′ w′
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
cat :
Z
operand′ :
Hxs :
WIntcategory; WPtrp = WIntcat; WPtroperand′

injection Hxs as ← Hoperand

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hr :
locale_readyrep m′ w′
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
operand′ :
Hoperand :
p = operand′

rewrite Hquery in Hpost

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hr :
locale_readyrep m′ w′
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
operand′ :
Hoperand :
p = operand′
Hpost :

destruct Hpost as _ Hsame | Heq Hselected ; exact Hsame |

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hr :
locale_readyrep m′ w′
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
operand′ :
Hoperand :
p = operand′
Hselected :
locale_selectedcategory w w′

injection Heq as Hpointer

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hr :
locale_readyrep m′ w′
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
operand′ :
Hoperand :
p = operand′
Hpointer :
q = locale_namew′ category
Hselected :
locale_selectedcategory w w′

destruct Hr as _ & _ & Hnames & _

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hnames :
∀category : Z, Incategory locale_categories → ptr_addrlocale_namew′ category ≠ 0 ∧ c_stringm′ locale_namew′ category locale_textw′ category
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
operand′ :
Hoperand :
p = operand′
Hpointer :
q = locale_namew′ category
Hselected :
locale_selectedcategory w w′

pose proof f_equalptr_addr Hpointer as Haddr

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hnames :
∀category : Z, Incategory locale_categories → ptr_addrlocale_namew′ category ≠ 0 ∧ c_stringm′ locale_namew′ category locale_textw′ category
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
operand′ :
Hoperand :
p = operand′
Hpointer :
q = locale_namew′ category
Hselected :
locale_selectedcategory w w′
Haddr :
ptr_addrq = ptr_addrlocale_namew′ category

exfalso

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hnames :
∀category : Z, Incategory locale_categories → ptr_addrlocale_namew′ category ≠ 0 ∧ c_stringm′ locale_namew′ category locale_textw′ category
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
operand′ :
Hoperand :
p = operand′
Hpointer :
q = locale_namew′ category
Hselected :
locale_selectedcategory w w′
Haddr :
ptr_addrq = ptr_addrlocale_namew′ category
⊢
False

apply proj1Hnamescategory Hcat

rep :
mem → locale_world → Prop
requests :
listword → mem → locale_world → Z → Z → Prop
args :
listarg
category :
Z
p, q :
s :
R.state
m :
trace :
listevent
s′ :
R.state
m′ :
Hnonzero :
ptr_addrp ≠ 0
Hzero :
ptr_addrq = 0
Hcall :
E.invokesetlocale_contractrep requests r args WIntcategory; WPtrp s m w trace CallReturnWPtrq s′ m′ w′
Hquery :
locale_queryWIntcategory; WPtrp = false
operand :
Hp :
p = operand
Hcat :
Htrace :
trace = [ ]
born :
listZ
He :
E.effectslocale_sourcesWIntcategory; WPtrp m w locale_writesWIntcategory; WPtrp w locale_releasesWIntcategory; WPtrp w λalign size : Z ⇒ locale_queryWIntcategory; WPtrp = false ∧ requestsWIntcategory; WPtrp m w align size s m [ ] s′ m′ born
Hnames :
∀category : Z, Incategory locale_categories → ptr_addrlocale_namew′ category ≠ 0 ∧ c_stringm′ locale_namew′ category locale_textw′ category
Hd :
locale_delegatesWIntcategory; WPtrp m w born m′ w′
operand′ :
Hoperand :
p = operand′
Hpointer :
q = locale_namew′ category
Hselected :
locale_selectedcategory w w′
Haddr :
ptr_addrq = ptr_addrlocale_namew′ category
⊢
ptr_addrlocale_namew′ category = 0

congruence

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros rep requests r args category p q s m w trace s′ m′ w′ Hnonzero Hzero Hcall
assert Hquery : locale_queryWIntcategory; WPtrp = false by apply Z.eqb_neq ; exact Hnonzero
destruct setlocale_invocation_ _ _ _ _ _ _ _ _ _ _ _ _ Hcall as Hpre & Htrace & born & He & Hresult
rewrite Hquery in Hresult
destruct Hresult as Hr & Hd & Hpost | why & Hbad & _ ; | discriminate Hbad
destruct Hpre as _ & cat & operand & Hxs & Hcat & _
injection Hxs as ← Hp
destruct Hpost as cat & operand′ & Hxs & Hpost
injection Hxs as ← Hoperand
rewrite Hquery in Hpost
destruct Hpost as _ Hsame | Heq Hselected ; exact Hsame |
injection Heq as Hpointer
destruct Hr as _ & _ & Hnames & _
pose proof f_equalptr_addr Hpointer as Haddr
exfalso
apply proj1Hnamescategory Hcat
congruence

Standalone compatibility wrapper; logic clients use LocaleOn with their actual exported machine instance instead.

455Module Locale R : Runtime
456Module M ≔ ExternalMachine R
Include LocaleOn R M

Independent logical controls: non-C names, a separate canonical built-in C name, a POSIX input, a mutable empty name, and an unrelated caller object. These are not native locale data or a representation proof.

463Definition locale_fixture: mem ≔
λ a  ⇒
a =? 2048
→
67
a =? 4096
→
80
a =? 4097
→
79
a =? 4098
→
83
a =? 4099
→
73
a =? 4100
→
88
mkRegion1024 1030 GlobalData Live; mkRegion2048 2056 GlobalData Live; mkRegion3072 3080 Heap Live; mkRegion4096 4104 Heap Live; mkRegion5120 5128 Heap Live
λ_ ⇒ CNone

Current names have different authority; canonical C belongs only to the internal read-source pool, not to a current name or input.

473Definition locale_before: locale_world ≔
λ category  ⇒
category =? 5
→
mkPtr3072 Obj3072
λ category  ⇒
category =? 5
→
[ ]
TAtom"non-C"
mkSpanmkPtr2048 Ro2048 2
mkSpanmkPtr3072 Obj3072 8
[ ]

The same physical memory can represent a selected canonical name; the logical window changes even though no new allocation is needed.

480Definition locale_after: locale_world ≔

Both fixture worlds have independently established checked names and roots, including the persistent internal readable source.

486Lemma locale_fixture_ready
Explore proof 37 tactics

Initial goal

assert Hroot : Forallwritable_spanlocale_fixture locale_rootslocale_before

2 open

focused goal

{constructor ; | constructor

2 open

deferred goal

split ; simpl ; lia |

2 open

⊢
∃base : Z reg : region, ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 = Objbase ∧ object_regionbase m_regionslocale_fixture = Somereg ∧ r_lifereg = Live ∧ access_reslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 Objbase span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 Write 1 = Someok
deferred goal

exists 3072, mkRegion3072 3080 Heap Live

2 open

⊢
ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 = Obj3072 ∧ object_region3072 m_regionslocale_fixture = Somer_base ≔ 3072; r_end ≔ 3080; r_kind ≔ Heap; r_life ≔ Live ∧ r_lifer_base ≔ 3072; r_end ≔ 3080; r_kind ≔ Heap; r_life ≔ Live = Live ∧ access_reslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 Obj3072 span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 Write 1 = Someok
deferred goal

repeat split ; reflexivity

deferred goal

assert Hread : Forallλsource ⇒ readable_byteslocale_fixture span_ptrsource span_sizesource locale_readslocale_before

2 open

focused goal

{constructor ; | constructor

2 open

deferred goal

split ; simpl ; lia |

2 open

⊢
∃base : Z reg : region, ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 = Objbase ∨ ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 = Robase ∧ object_regionbase m_regionslocale_fixture = Somereg ∧ r_lifereg = Live ∧ access_reslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 Read 1 = Someok ∧ ∀i : Z, 0 ≤ i < span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 → 0 ≤ m_byteslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 + i < 256
deferred goal

split

3 open

⊢
∃base : Z reg : region, ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 = Objbase ∨ ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 = Robase ∧ object_regionbase m_regionslocale_fixture = Somereg ∧ r_lifereg = Live
focused goal
⊢
access_reslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 Read 1 = Someok ∧ ∀i : Z, 0 ≤ i < span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 → 0 ≤ m_byteslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 + i < 256
deferred goal

–exists 2048, mkRegion2048 2056 GlobalData Live

3 open

⊢
ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 = Obj2048 ∨ ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 = Ro2048 ∧ object_region2048 m_regionslocale_fixture = Somer_base ≔ 2048; r_end ≔ 2056; r_kind ≔ GlobalData; r_life ≔ Live ∧ r_lifer_base ≔ 2048; r_end ≔ 2056; r_kind ≔ GlobalData; r_life ≔ Live = Live
deferred goal
⊢
access_reslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 Read 1 = Someok ∧ ∀i : Z, 0 ≤ i < span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 → 0 ≤ m_byteslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 + i < 256
deferred goal

repeat split ; auto

2 open

deferred goal
⊢
access_reslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 Read 1 = Someok ∧ ∀i : Z, 0 ≤ i < span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 → 0 ≤ m_byteslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 + i < 256
deferred goal

–split ; reflexivity |

2 open

⊢
∀i : Z, 0 ≤ i < span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 → 0 ≤ m_byteslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 + i < 256
deferred goal

intros i Hi

2 open

i :
Z
Hi :
0 ≤ i < span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2
⊢
0 ≤ m_byteslocale_fixture ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 + i < 256
deferred goal

change 0 ≤ m_byteslocale_fixture 2048 + i < 256

2 open

i :
Z
Hi :
0 ≤ i < span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2
⊢
0 ≤ m_byteslocale_fixture 2048 + i < 256
deferred goal

assert i = 0 ∨ i = 1 by simpl in Hi ; lia

2 open

i :
Z
Hi :
0 ≤ i < span_sizespan_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2
H :
i = 0 ∨ i = 1
⊢
0 ≤ m_byteslocale_fixture 2048 + i < 256
deferred goal

destruct H as → | → ; vm_compute ; intuition congruence

deferred goal

split ; split ; exact I | | exact I | ; split ; exact Hroot | ; split

4 open

focused goal
focused goal
focused goal

–intros category _

4 open

deferred goal
deferred goal
deferred goal

cbn [ locale_name locale_text locale_before ]

4 open

⊢
category =? 5
→
ptr_addr ≔ 3072; ptr_cap ≔ Obj3072
≠
0
∧
category =? 5
→
ptr_addr ≔ 3072; ptr_cap ≔ Obj3072
category =? 5
→
[ ]
deferred goal
deferred goal
deferred goal

destruct category =? 5 ; vm_compute ; repeat split ; congruence

3 open

deferred goal
deferred goal
deferred goal

–split ; exact Hread |

3 open

deferred goal
deferred goal

split ; constructor |

3 open

deferred goal
deferred goal

intros category _

3 open

⊢
∃base : Z, ptr_caplocale_namelocale_before category = Objbase ∨ ptr_caplocale_namelocale_before category = Robase ∧ base mod 8 = 0
deferred goal
deferred goal

cbn [ locale_name locale_before ]

3 open

⊢
∃ base : Z  ,
category =? 5
→
ptr_addr ≔ 3072; ptr_cap ≔ Obj3072
=
Objbase
∨
category =? 5
→
ptr_addr ≔ 3072; ptr_cap ≔ Obj3072
=
Robase
∧
base mod 8 = 0
deferred goal
deferred goal

destruct category =? 5

4 open

⊢
∃base : Z, ptr_capptr_addr ≔ 3072; ptr_cap ≔ Obj3072 = Objbase ∨ ptr_capptr_addr ≔ 3072; ptr_cap ≔ Obj3072 = Robase ∧ base mod 8 = 0
focused goal
⊢
∃base : Z, ptr_caphello_ptr = Objbase ∨ ptr_caphello_ptr = Robase ∧ base mod 8 = 0
deferred goal
deferred goal

+exists 3072

4 open

⊢
ptr_capptr_addr ≔ 3072; ptr_cap ≔ Obj3072 = Obj3072 ∨ ptr_capptr_addr ≔ 3072; ptr_cap ≔ Obj3072 = Ro3072 ∧ 3072 mod 8 = 0
deferred goal
⊢
∃base : Z, ptr_caphello_ptr = Objbase ∨ ptr_caphello_ptr = Robase ∧ base mod 8 = 0
deferred goal
deferred goal

split ; left ; reflexivity | reflexivity

3 open

deferred goal
⊢
∃base : Z, ptr_caphello_ptr = Objbase ∨ ptr_caphello_ptr = Robase ∧ base mod 8 = 0
deferred goal
deferred goal

+exists 1024

3 open

⊢
ptr_caphello_ptr = Obj1024 ∨ ptr_caphello_ptr = Ro1024 ∧ 1024 mod 8 = 0
deferred goal
deferred goal

split ; right ; reflexivity | reflexivity

2 open

deferred goal
deferred goal

–intros category _

2 open

deferred goal

vm_compute

2 open

⊢
2048 = 0 → False ∧ Someok = Someok ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 67 = 67 ∧ 0 = 0
deferred goal

repeat split ; congruence

deferred goal

–split ; exact Hread |

split ; constructor |

intros category _

⊢
∃base : Z, ptr_caplocale_namelocale_after category = Objbase ∨ ptr_caplocale_namelocale_after category = Robase ∧ base mod 8 = 0

exists 2048

⊢
ptr_caplocale_namelocale_after category = Obj2048 ∨ ptr_caplocale_namelocale_after category = Ro2048 ∧ 2048 mod 8 = 0

split ; right ; reflexivity | reflexivity

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
{constructor ; | constructor
split ; simpl ; lia |
exists 3072, mkRegion3072 3080 Heap Live
repeat split ; reflexivity
assert Hread : Forallλsource ⇒ readable_byteslocale_fixture span_ptrsource span_sizesource locale_readslocale_before
{constructor ; | constructor
split ; simpl ; lia |
split
–exists 2048, mkRegion2048 2056 GlobalData Live
repeat split ; auto
–split ; reflexivity |
intros i Hi
change 0 ≤ m_byteslocale_fixture 2048 + i < 256
assert i = 0 ∨ i = 1 by simpl in Hi ; lia
destruct H as → | → ; vm_compute ; intuition congruence
split ; split ; exact I | | exact I | ; split ; exact Hroot | ; split
–intros category _
destruct category =? 5 ; vm_compute ; repeat split ; congruence
–split ; exact Hread |
split ; constructor |
intros category _
destruct category =? 5
+exists 3072
split ; left ; reflexivity | reflexivity
+exists 1024
split ; right ; reflexivity | reflexivity
–intros category _
vm_compute
repeat split ; congruence
–split ; exact Hread |
split ; constructor |
intros category _
exists 2048
split ; right ; reflexivity | reflexivity

The character pointer need not be aligned when its object's base is.

513Example locale_interior_name_aligned: let w ≔ mkLocaleWorld0 λ_ ⇒ mkPtr1025 Ro1024 λ_ ⇒ 101; 108; 108; 111 TAtom"C" [ ] [ ] [ ] in locale_readyλ_ _ ⇒ True hello_mem w ∧ ptr_addrlocale_namew 0 mod 8 = 1
Explore proof 11 tactics

Initial goal

⊢
let w ≔ locale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] in
locale_readyλ_ : mem _ : locale_world ⇒ True hello_mem w ∧ ptr_addrlocale_namew 0 mod 8 = 1

split ; | reflexivity

⊢
locale_readyλ_ : mem _ : locale_world ⇒ True hello_mem locale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

split ; exact I |

⊢
Forallwritable_spanhello_mem locale_rootslocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ ∀category : Z, Incategory locale_categories → ptr_addrlocale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category ≠ 0 ∧ c_stringhello_mem locale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category locale_textlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category ∧ Forallλsource : span ⇒ readable_byteshello_mem span_ptrsource span_sizesource locale_readslocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ Foralllocale_heaphello_mem locale_ownedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ locale_names_alignedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

split ; constructor |

⊢
∀category : Z, Incategory locale_categories → ptr_addrlocale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category ≠ 0 ∧ c_stringhello_mem locale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category locale_textlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category ∧ Forallλsource : span ⇒ readable_byteshello_mem span_ptrsource span_sizesource locale_readslocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ Foralllocale_heaphello_mem locale_ownedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ locale_names_alignedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

split

2 open

⊢
∀category : Z, Incategory locale_categories → ptr_addrlocale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category ≠ 0 ∧ c_stringhello_mem locale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category locale_textlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category
focused goal
⊢
Forallλsource : span ⇒ readable_byteshello_mem span_ptrsource span_sizesource locale_readslocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ Foralllocale_heaphello_mem locale_ownedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ locale_names_alignedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

–intros category _

2 open

category :
Z
⊢
ptr_addrlocale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category ≠ 0 ∧ c_stringhello_mem locale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category locale_textlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category
deferred goal
⊢
Forallλsource : span ⇒ readable_byteshello_mem span_ptrsource span_sizesource locale_readslocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ Foralllocale_heaphello_mem locale_ownedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ locale_names_alignedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

vm_compute ; repeat split ; congruence

deferred goal
⊢
Forallλsource : span ⇒ readable_byteshello_mem span_ptrsource span_sizesource locale_readslocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ Foralllocale_heaphello_mem locale_ownedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ locale_names_alignedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

–split ; constructor |

⊢
Foralllocale_heaphello_mem locale_ownedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] ∧ locale_names_alignedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

split ; constructor |

⊢
locale_names_alignedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

intros category _

category :
Z
⊢
∃base : Z, ptr_caplocale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category = Objbase ∨ ptr_caplocale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category = Robase ∧ base mod 8 = 0

exists 1024

category :
Z
⊢
ptr_caplocale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category = Obj1024 ∨ ptr_caplocale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1024; locale_text ≔ λ_ : Z ⇒ 101; 108; 108; 111; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category = Ro1024 ∧ 1024 mod 8 = 0

split ; right ; reflexivity | reflexivity

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
split ; | reflexivity
split ; exact I |
split ; constructor |
split
–intros category _
vm_compute ; repeat split ; congruence
–split ; constructor |
split ; constructor |
intros category _
exists 1024
split ; right ; reflexivity | reflexivity

Readability alone admitted this unaligned-base string before the strengthened readiness premise. Alignment is an independent fact.

527Example locale_unaligned_name_rejected: let m ≔ mkMemλ_ ⇒ 0 mkRegion1025 1026 GlobalData Live λ_ ⇒ CNone in let w ≔ mkLocaleWorld0 λ_ ⇒ mkPtr1025 Ro1025 λ_ ⇒ [ ] TAtom"C" [ ] [ ] [ ] in c_stringm locale_namew 0 [ ] ∧ ¬locale_readyλ_ _ ⇒ True m w
Explore proof 3 tactics

Initial goal

⊢
let m ≔ m_bytes ≔ λ_ : Z ⇒ 0; m_regions ≔ r_base ≔ 1025; r_end ≔ 1026; r_kind ≔ GlobalData; r_life ≔ Live; m_aux ≔ λ_ : Z ⇒ CNone in
let w ≔ locale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1025; locale_text ≔ λ_ : Z ⇒ [ ]; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] in
c_stringm locale_namew 0 [ ] ∧ ¬locale_readyλ_ : mem _ : locale_world ⇒ True m w

split ; vm_compute ; repeat split ; congruence |

⊢
¬locale_readyλ_ : mem _ : locale_world ⇒ True m_bytes ≔ λ_ : Z ⇒ 0; m_regions ≔ r_base ≔ 1025; r_end ≔ 1026; r_kind ≔ GlobalData; r_life ≔ Live; m_aux ≔ λ_ : Z ⇒ CNone locale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1025; locale_text ≔ λ_ : Z ⇒ [ ]; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

intros _ & _ & _ & _ & _ & Haligned

Haligned :
locale_names_alignedlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 1025; ptr_cap ≔ Ro1025; locale_text ≔ λ_ : Z ⇒ [ ]; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]
⊢
False

destruct Haligned0 or_introleq_refl as base & Hcap | Hcap & Hmod ; discriminate Hcap | injection Hcap as ← ; discriminate Hmod

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
split ; vm_compute ; repeat split ; congruence |
intros _ & _ & _ & _ & _ & Haligned
destruct Haligned0 or_introleq_refl as base & Hcap | Hcap & Hmod ; discriminate Hcap | injection Hcap as ← ; discriminate Hmod

Ordinary calls use the exact selected W/P signature.

540Definition locale_call_args: listarg ≔

One fixed registry supports exact CTYPE and MESSAGES null queries.

543Module InterpLocale ≔ Locale InterpRuntime
545Example locale_query_calls: ∀category, category = 0 ∨ category = 5 → InterpLocale.E.invokesetlocale_contractλ_ _ ⇒ True λ_ _ _ _ _ ⇒ False CResultTAtom"name" P locale_call_args WIntcategory; WPtrmkPtr0 CNone InterpRuntime.start locale_fixture locale_before [ ] CallReturnWPtrif category =? 5 then mkPtr3072 Obj3072 else mkPtr1024 Ro1024 InterpRuntime.start locale_fixture locale_before
Explore proof 7 tactics

Initial goal

⊢
∀category : Z, category = 0 ∨ category = 5 → InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False CResultTAtom"name" P locale_call_args WIntcategory; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone InterpRuntime.start locale_fixture locale_before [ ] CallReturnWPtrif category =? 5 then ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 else ptr_addr ≔ 1024; ptr_cap ≔ Ro1024 InterpRuntime.start locale_fixture locale_before

intros category Hcat

category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False CResultTAtom"name" P locale_call_args WIntcategory; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone InterpRuntime.start locale_fixture locale_before [ ] CallReturnWPtrif category =? 5 then ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 else ptr_addr ≔ 1024; ptr_cap ≔ Ro1024 InterpRuntime.start locale_fixture locale_before

apply InterpLocale.setlocale_query_admitted

4 open

category :
Z
Hcat :
category = 0 ∨ category = 5
focused goal
category :
Z
Hcat :
category = 0 ∨ category = 5
focused goal
category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
focused goal
category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
ptr_addrptr_addr ≔ 0; ptr_cap ≔ CNone = 0

–split ; right ; eexists ; reflexivity |

4 open

category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
∃category0 name : value, locale_call_args = ArgW category0; ArgP name
deferred goal
category :
Z
Hcat :
category = 0 ∨ category = 5
deferred goal
category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
deferred goal
category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
ptr_addrptr_addr ≔ 0; ptr_cap ≔ CNone = 0

eexists ; eexists ; reflexivity

3 open

deferred goal
category :
Z
Hcat :
category = 0 ∨ category = 5
deferred goal
category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
deferred goal
category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
ptr_addrptr_addr ≔ 0; ptr_cap ≔ CNone = 0

–exact proj1locale_fixture_ready

2 open

deferred goal
category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
deferred goal
category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
ptr_addrptr_addr ≔ 0; ptr_cap ≔ CNone = 0

–destruct Hcat as → | → ; vm_compute ; tauto

deferred goal
category :
Z
Hcat :
category = 0 ∨ category = 5
⊢
ptr_addrptr_addr ≔ 0; ptr_cap ≔ CNone = 0

–reflexivity

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros category Hcat
–split ; right ; eexists ; reflexivity |
eexists ; eexists ; reflexivity
–exact proj1locale_fixture_ready
–destruct Hcat as → | → ; vm_compute ; tauto
–reflexivity

The source-pool fix matters: canonical C's Ro is not supplied by any current name or by the independently allocated POSIX input.

Explore proof 8 tactics

Initial goal

destruct locale_delegates_refl_ WInt6; WPtrmkPtr4096 Obj4096 _ _ proj1locale_fixture_ready as Hroots _ Hreads Howned

split ; exact Hroots |

split

2 open

focused goal

–intros category _

2 open

deferred goal

right

2 open

Howned :
∀base : Z, Inbase locale_ownedlocale_before → Inbase locale_ownedlocale_before ++ [ ] ∧ locale_heaplocale_fixture base
category :
Z
deferred goal

exists mkSpanmkPtr2048 Ro2048 2

2 open

Howned :
∀base : Z, Inbase locale_ownedlocale_before → Inbase locale_ownedlocale_before ++ [ ] ∧ locale_heaplocale_fixture base
category :
Z
⊢
deferred goal

split ; unfold locale_private_sources ; simpl ; auto | reflexivity

deferred goal

–split ; exact Hreads | exact Howned

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
destruct locale_delegates_refl_ WInt6; WPtrmkPtr4096 Obj4096 _ _ proj1locale_fixture_ready as Hroots _ Hreads Howned
split ; exact Hroots |
split
–intros category _
right
exists mkSpanmkPtr2048 Ro2048 2
split ; unfold locale_private_sources ; simpl ; auto | reflexivity
–split ; exact Hreads | exact Howned

A non-C world can switch through POSIX to a separately represented canonical C name without fabricating or downgrading its capability.

Explore proof 13 tactics

Initial goal

eapply InterpLocale.setlocale_success_admitted with bytes := 80; 79; 83; 73; 88 born := [ ] w′ := locale_after category := 6

9 open

focused goal
focused goal
focused goal
⊢
ptr_addrptr_addr ≔ 4096; ptr_cap ≔ Obj4096 ≠ 0
focused goal
⊢
c_stringlocale_fixture ptr_addr ≔ 4096; ptr_cap ≔ Obj4096 80; 79; 83; 73; 88
focused goal
focused goal
focused goal
focused goal

–split ; right ; eexists ; reflexivity |

9 open

⊢
∃category name : value, locale_call_args = ArgW category; ArgP name
deferred goal
deferred goal
deferred goal
⊢
ptr_addrptr_addr ≔ 4096; ptr_cap ≔ Obj4096 ≠ 0
deferred goal
⊢
c_stringlocale_fixture ptr_addr ≔ 4096; ptr_cap ≔ Obj4096 80; 79; 83; 73; 88
deferred goal
deferred goal
deferred goal
deferred goal

eexists ; eexists ; reflexivity

8 open

deferred goal
deferred goal
deferred goal
⊢
ptr_addrptr_addr ≔ 4096; ptr_cap ≔ Obj4096 ≠ 0
deferred goal
⊢
c_stringlocale_fixture ptr_addr ≔ 4096; ptr_cap ≔ Obj4096 80; 79; 83; 73; 88
deferred goal
deferred goal
deferred goal
deferred goal

–exact proj1locale_fixture_ready

7 open

deferred goal
deferred goal
⊢
ptr_addrptr_addr ≔ 4096; ptr_cap ≔ Obj4096 ≠ 0
deferred goal
⊢
c_stringlocale_fixture ptr_addr ≔ 4096; ptr_cap ≔ Obj4096 80; 79; 83; 73; 88
deferred goal
deferred goal
deferred goal
deferred goal

–vm_compute ; tauto

6 open

deferred goal
⊢
ptr_addrptr_addr ≔ 4096; ptr_cap ≔ Obj4096 ≠ 0
deferred goal
⊢
c_stringlocale_fixture ptr_addr ≔ 4096; ptr_cap ≔ Obj4096 80; 79; 83; 73; 88
deferred goal
deferred goal
deferred goal
deferred goal

–discriminate

5 open

deferred goal
⊢
c_stringlocale_fixture ptr_addr ≔ 4096; ptr_cap ≔ Obj4096 80; 79; 83; 73; 88
deferred goal
deferred goal
deferred goal
deferred goal

–vm_compute

5 open

⊢
Someok = Someok ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 80 = 80 ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 79 = 79 ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 83 = 83 ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 73 = 73 ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 88 = 88 ∧ 0 = 0
deferred goal
deferred goal
deferred goal
deferred goal

repeat split ; congruence

4 open

deferred goal
deferred goal
deferred goal
deferred goal

–constructor

3 open

deferred goal
deferred goal
deferred goal

–exact proj2locale_fixture_ready

2 open

deferred goal
deferred goal

–exact locale_canonical_delegated

deferred goal

–split ; right ; reflexivity |

⊢
∀other : Z, Inother locale_categories → 6 ≠ 6 → other ≠ 6 → other ≠ 6 → locale_textlocale_after other = locale_textlocale_before other ∧ 6 ≠ 0 → 6 ≠ 6 → locale_codeclocale_after = locale_codeclocale_before

split ; intros ; congruence

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
eapply InterpLocale.setlocale_success_admitted with bytes := 80; 79; 83; 73; 88 born := [ ] w′ := locale_after category := 6
–split ; right ; eexists ; reflexivity |
eexists ; eexists ; reflexivity
–exact proj1locale_fixture_ready
–vm_compute ; tauto
–discriminate
–vm_compute
repeat split ; congruence
–constructor
–exact proj2locale_fixture_ready
–split ; right ; reflexivity |
split ; intros ; congruence

Empty environment selection and an input borrowed from an earlier query both admit ordinary refusal, without mutating caller data.

596Example locale_setter_inputs: ∀p bytes, p = mkPtr3072 Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes → InterpLocale.E.invokesetlocale_contractλ_ _ ⇒ True λ_ _ _ _ _ ⇒ False CVoid locale_call_args WInt6; WPtrp InterpRuntime.start locale_fixture locale_before [ ] CallReturnWPtrmkPtr0 CNone InterpRuntime.start locale_fixture locale_before
Explore proof 8 tactics

Initial goal

⊢
∀p : ptr bytes : listZ, p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes → InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False CVoid locale_call_args WInt6; WPtrp InterpRuntime.start locale_fixture locale_before [ ] CallReturnWPtrptr_addr ≔ 0; ptr_cap ≔ CNone InterpRuntime.start locale_fixture locale_before

intros p bytes Hcases

p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes

eapply InterpLocale.setlocale_refusal_admitted with bytes := bytes

5 open

p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
focused goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
focused goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
focused goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
⊢
ptr_addrp ≠ 0
focused goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes

–split ; left ; reflexivity |

5 open

p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
⊢
∃category name : value, locale_call_args = ArgW category; ArgP name
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
⊢
ptr_addrp ≠ 0
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes

eexists ; eexists ; reflexivity

4 open

deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
⊢
ptr_addrp ≠ 0
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes

–exact proj1locale_fixture_ready

3 open

deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
⊢
ptr_addrp ≠ 0
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes

–vm_compute ; tauto

2 open

deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes
⊢
ptr_addrp ≠ 0
deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes

–destruct Hcases as → → | → → ; discriminate

deferred goal
p :
bytes :
listZ
Hcases :
p = ptr_addr ≔ 3072; ptr_cap ≔ Obj3072 ∧ bytes = [ ] ∨ p = hello_ptr ∧ bytes = hello_bytes

–destruct Hcases as → → | → → ; vm_compute ; repeat split ; congruence

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros p bytes Hcases
eapply InterpLocale.setlocale_refusal_admitted with bytes := bytes
–split ; left ; reflexivity |
eexists ; eexists ; reflexivity
–exact proj1locale_fixture_ready
–vm_compute ; tauto
–destruct Hcases as → → | → → ; discriminate
–destruct Hcases as → → | → → ; vm_compute ; repeat split ; congruence

All public null-query completions have the handwritten exact pointer/capability, empty trace and unchanged snapshots.

612Example locale_query_completions: ∀trace ending s′ m′ w′, InterpLocale.E.invokesetlocale_contractλ_ _ ⇒ True λ_ _ _ _ _ ⇒ False CVoid locale_call_args WInt5; WPtrmkPtr0 CNone InterpRuntime.start locale_fixture locale_before trace ending s′ m′ w′ → trace = [ ] ∧ s′ = InterpRuntime.start ∧ m′ = locale_fixture ∧ w′ = locale_before ∧ ending = CallReturnWPtrmkPtr3072 Obj3072
Explore proof 2 tactics

Initial goal

⊢
∀trace : listevent ending : call_end s′ : InterpRuntime.state m′ : mem w′ : locale_world, InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False CVoid locale_call_args WInt5; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone InterpRuntime.start locale_fixture locale_before trace ending s′ m′ w′ → trace = [ ] ∧ s′ = InterpRuntime.start ∧ m′ = locale_fixture ∧ w′ = locale_before ∧ ending = CallReturnWPtrptr_addr ≔ 3072; ptr_cap ≔ Obj3072

intros

trace :
listevent
ending :
m′ :
H :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False CVoid locale_call_args WInt5; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone InterpRuntime.start locale_fixture locale_before trace ending s′ m′ w′
⊢
trace = [ ] ∧ s′ = InterpRuntime.start ∧ m′ = locale_fixture ∧ w′ = locale_before ∧ ending = CallReturnWPtrptr_addr ≔ 3072; ptr_cap ≔ Obj3072

eapply InterpLocale.setlocale_query_invocation with category := 5 w := locale_before p := mkPtr0 CNone ; reflexivity | exact H

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros
eapply InterpLocale.setlocale_query_invocation with category := 5 w := locale_before p := mkPtr0 CNone ; reflexivity | exact H

Read/write authority must not grow into exclusive release rights.

Explore proof 3 tactics
Source script
intros _ & _ & _ & Howned
destruct Howned3072 or_introleq_refl as Hbad _
exact Hbad

Equal text alone does not extend a borrow through pointer replacement.

Explore proof 3 tactics

Initial goal

intros _ Hnames _ | Hepoch ; | discriminate Hepoch

pose proof f_equalλnames ⇒ names0 Hnames as H

discriminate H

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros _ Hnames _ | Hepoch ; | discriminate Hepoch
pose proof f_equalλnames ⇒ names0 Hnames as H
discriminate H

A nonreturned category cannot smuggle the unrelated caller object's capability into the world for exposure by a later pure query.

Explore proof 10 tactics

Initial goal

intros _ & Hnames & _

Hnames :
⊢
False

specialize Hnames5 ltac:vm_compute ; tauto

assert Hcaps : Forallλsource ⇒ ptr_capspan_ptrsource ≠ Obj5120 locale_private_sourceslocale_before

2 open

focused goal

{vm_compute

2 open

⊢
Forall
λ x : span  ⇒
match match x with span_ptr ≔ span_ptr ⇒ span_ptr end with
=
Obj5120
→
False
span_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2; span_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 1; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6
deferred goal

repeat constructor ; discriminate

deferred goal

destruct Hnames as base & & _ | source & Hin & Hcap

⊢
False

rewrite Forall_forall in Hcaps

apply Hcapssource Hin

symmetry

exact Hcap

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros _ & Hnames & _
specialize Hnames5 ltac:vm_compute ; tauto
assert Hcaps : Forallλsource ⇒ ptr_capspan_ptrsource ≠ Obj5120 locale_private_sourceslocale_before
{vm_compute
repeat constructor ; discriminate
destruct Hnames as base & & _ | source & Hin & Hcap
rewrite Forall_forall in Hcaps
apply Hcapssource Hin
symmetry
exact Hcap

Both transient sources really can supply the caller capability: its input pointer and a complete private root slot. Neither may become retained authority, even through a zero-sized future span.

661Definition locale_caller_memory: mem ≔
Explore proof 27 tactics

Initial goal

split

2 open

focused goal

–right

2 open

⊢
∃s : span, Ins locale_sourcesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_caller_memory locale_before ∧ Obj5120 = ptr_capspan_ptrs ∨ ∃s : span a : Z, Ins locale_sourcesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_caller_memory locale_before ∧ span_containss a ∧ a + 8 ≤ ptr_addrspan_ptrs + span_sizes ∧ access_reslocale_caller_memory a ptr_capspan_ptrs 8 Read 8 = Someok ∧ Obj5120 = m_auxlocale_caller_memory a ∨ ∃base : Z, Inbase [ ] ∧ Obj5120 = Objbase ∨ Obj5120 = Robase
deferred goal

left

2 open

deferred goal

exists mkSpanmkPtr5120 Obj5120 string_lengthlocale_caller_memory mkPtr5120 Obj5120 + 1

2 open

deferred goal

split ; unfold locale_sources ; apply in_or_app ; right ; simpl ; auto | reflexivity

deferred goal

–split

2 open

focused goal

+right

2 open

⊢
∃s : span, Ins locale_sourcesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_caller_memory locale_before ∧ Ro5120 = ptr_capspan_ptrs ∨ ∃s : span a : Z, Ins locale_sourcesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_caller_memory locale_before ∧ span_containss a ∧ a + 8 ≤ ptr_addrspan_ptrs + span_sizes ∧ access_reslocale_caller_memory a ptr_capspan_ptrs 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory a ∨ ∃base : Z, Inbase [ ] ∧ Ro5120 = Objbase ∨ Ro5120 = Robase
deferred goal

right

2 open

⊢
∃s : span a : Z, Ins locale_sourcesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_caller_memory locale_before ∧ span_containss a ∧ a + 8 ≤ ptr_addrspan_ptrs + span_sizes ∧ access_reslocale_caller_memory a ptr_capspan_ptrs 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory a ∨ ∃base : Z, Inbase [ ] ∧ Ro5120 = Objbase ∨ Ro5120 = Robase
deferred goal

left

2 open

deferred goal

exists mkSpanmkPtr3072 Obj3072 8, 3072

2 open

⊢
Inspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 locale_sourcesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_caller_memory locale_before ∧ span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

split

3 open

focused goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

∗unfold locale_sources , locale_private_sources

3 open

deferred goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

apply in_or_app

3 open

⊢
∨
Inspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8
→
[ ]
else
span_ptr ≔ ptr_addr ≔ 5120; ptr_cap ≔ Obj5120; span_size ≔ string_lengthlocale_caller_memory ptr_addr ≔ 5120; ptr_cap ≔ Obj5120 + 1
deferred goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

left

3 open

deferred goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

apply in_or_app

3 open

deferred goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

left

3 open

deferred goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

apply in_or_app

3 open

⊢
Inspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 locale_readslocale_before ∨ Inspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 locale_rootslocale_before
deferred goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

right

3 open

⊢
Inspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 locale_rootslocale_before
deferred goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

simpl

3 open

⊢
span_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 = span_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∨ False
deferred goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

auto

2 open

deferred goal
⊢
span_containsspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 3072 ∧ 3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

∗split ; change 3072 ≤ 3072 < 3080 ; lia |

2 open

⊢
3072 + 8 ≤ ptr_addrspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 + span_sizespan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 ∧ access_reslocale_caller_memory 3072 ptr_capspan_ptrspan_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 8 Read 8 = Someok ∧ Ro5120 = m_auxlocale_caller_memory 3072
deferred goal

split ; simpl ; lia |

2 open

⊢
deferred goal

split ; reflexivity

deferred goal

+assert Hcaps : Forallλsource ⇒ ptr_capspan_ptrsource ≠ Obj5120 ∧ ptr_capspan_ptrsource ≠ Ro5120 locale_private_sourceslocale_before

2 open

⊢
Forallλsource : span ⇒ ptr_capspan_ptrsource ≠ Obj5120 ∧ ptr_capspan_ptrsource ≠ Ro5120 locale_private_sourceslocale_before
focused goal
Hcaps :
Forallλsource : span ⇒ ptr_capspan_ptrsource ≠ Obj5120 ∧ ptr_capspan_ptrsource ≠ Ro5120 locale_private_sourceslocale_before

{vm_compute

2 open

⊢
Forall
λ x : span  ⇒
match match x with span_ptr ≔ span_ptr ⇒ span_ptr end with
=
Obj5120
→
False
∧
match match x with span_ptr ≔ span_ptr ⇒ span_ptr end with
=
Ro5120
→
False
span_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2; span_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 1; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6; span_ptr ≔ ptr_addr ≔ 1024; ptr_cap ≔ Ro1024; span_size ≔ 6
deferred goal
Hcaps :
Forallλsource : span ⇒ ptr_capspan_ptrsource ≠ Obj5120 ∧ ptr_capspan_ptrsource ≠ Ro5120 locale_private_sourceslocale_before

repeat constructor ; discriminate

deferred goal
Hcaps :
Forallλsource : span ⇒ ptr_capspan_ptrsource ≠ Obj5120 ∧ ptr_capspan_ptrsource ≠ Ro5120 locale_private_sourceslocale_before

split ; intros base & & _ | source & Hin & Hcap ; rewrite Forall_forall in Hcaps ; destruct Hcapssource Hin as Hobj Hro ; congruence

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
split
–right
left
split ; unfold locale_sources ; apply in_or_app ; right ; simpl ; auto | reflexivity
–split
+right
right
left
exists mkSpanmkPtr3072 Obj3072 8, 3072
split
apply in_or_app
left
apply in_or_app
left
apply in_or_app
right
simpl
auto
∗split ; change 3072 ≤ 3072 < 3080 ; lia |
split ; simpl ; lia |
split ; reflexivity
+assert Hcaps : Forallλsource ⇒ ptr_capspan_ptrsource ≠ Obj5120 ∧ ptr_capspan_ptrsource ≠ Ro5120 locale_private_sourceslocale_before
{vm_compute
repeat constructor ; discriminate
split ; intros base & & _ | source & Hin & Hcap ; rewrite Forall_forall in Hcaps ; destruct Hcapssource Hin as Hobj Hro ; congruence

Each role independently attempts the two-call laundering step: installing the caller as a name, a zero-sized read, or a zero-sized root. A subsequent query/setter can never receive such a pool.

693Definition locale_caller_endpointrole : Z : locale_world ≔
703Example locale_no_caller_endpoint: ∀role, role = 0 ∨ role = 1 ∨ role = 2 → ¬locale_delegatesWInt6; WPtrmkPtr5120 Obj5120 locale_caller_memory locale_before [ ] locale_caller_memory locale_caller_endpointrole
Explore proof 26 tactics

Initial goal

⊢
∀role : Z, role = 0 ∨ role = 1 ∨ role = 2 → ¬locale_delegatesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_caller_memory locale_before [ ] locale_caller_memory locale_caller_endpointrole

intros role Hrole Hd

role :
Z
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
⊢
False

apply proj1proj2proj2locale_caller_transient_only

role :
Z
Hrole :
role = 0 ∨ role = 1 ∨ role = 2

destruct Hrole as → | → | →

3 open

focused goal
focused goal

–apply locale_delegates_private_ _ _ _ _ _ locale_name_spanlocale_caller_endpoint0 0 Hd

3 open

deferred goal
deferred goal

unfold locale_private_sources

3 open

deferred goal
deferred goal

apply in_or_app

3 open

deferred goal
deferred goal

right

3 open

deferred goal
deferred goal

apply in_map

3 open

deferred goal
deferred goal

simpl

3 open

⊢
0 = 0 ∨ 1 = 0 ∨ 2 = 0 ∨ 3 = 0 ∨ 4 = 0 ∨ 5 = 0 ∨ 6 = 0 ∨ 7 = 0 ∨ 8 = 0 ∨ 9 = 0 ∨ 10 = 0 ∨ 11 = 0 ∨ 12 = 0 ∨ False
deferred goal
deferred goal

auto

2 open

deferred goal
deferred goal

–apply locale_delegates_private_ _ _ _ _ _ mkSpanmkPtr5120 Obj5120 0 Hd

2 open

deferred goal

unfold locale_private_sources

2 open

deferred goal

apply in_or_app

2 open

deferred goal

left

2 open

deferred goal

apply in_or_app

2 open

deferred goal

left

2 open

deferred goal

simpl

2 open

⊢
span_ptr ≔ ptr_addr ≔ 5120; ptr_cap ≔ Obj5120; span_size ≔ 0 = span_ptr ≔ ptr_addr ≔ 5120; ptr_cap ≔ Obj5120; span_size ≔ 0 ∨ span_ptr ≔ ptr_addr ≔ 2048; ptr_cap ≔ Ro2048; span_size ≔ 2 = span_ptr ≔ ptr_addr ≔ 5120; ptr_cap ≔ Obj5120; span_size ≔ 0 ∨ False
deferred goal

auto

deferred goal

–apply locale_delegates_private_ _ _ _ _ _ mkSpanmkPtr5120 Obj5120 0 Hd

unfold locale_private_sources

apply in_or_app

left

apply in_or_app

right

simpl

⊢
span_ptr ≔ ptr_addr ≔ 5120; ptr_cap ≔ Obj5120; span_size ≔ 0 = span_ptr ≔ ptr_addr ≔ 5120; ptr_cap ≔ Obj5120; span_size ≔ 0 ∨ span_ptr ≔ ptr_addr ≔ 3072; ptr_cap ≔ Obj3072; span_size ≔ 8 = span_ptr ≔ ptr_addr ≔ 5120; ptr_cap ≔ Obj5120; span_size ≔ 0 ∨ False

auto

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros role Hrole Hd
apply proj1proj2proj2locale_caller_transient_only
destruct Hrole as → | → | →
apply in_or_app
right
apply in_map
simpl
auto
–apply locale_delegates_private_ _ _ _ _ _ mkSpanmkPtr5120 Obj5120 0 Hd
apply in_or_app
left
apply in_or_app
left
simpl
auto
–apply locale_delegates_private_ _ _ _ _ _ mkSpanmkPtr5120 Obj5120 0 Hd
apply in_or_app
left
apply in_or_app
right
simpl
auto

Public-call rejection: no-request setters cannot install any of those future pools. The effects path cannot disguise caller storage as a fresh allocation by choosing a nonempty born list.

722Example locale_no_caller_call: ∀role r args s trace ending s′, role = 0 ∨ role = 1 ∨ role = 2 → ¬InterpLocale.E.invokesetlocale_contractλ_ _ ⇒ True λ_ _ _ _ _ ⇒ False r args WInt6; WPtrmkPtr5120 Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
Explore proof 10 tactics

Initial goal

⊢
∀role : Z r : call_result args : listarg s : InterpRuntime.state trace : listevent ending : call_end s′ : InterpRuntime.state, role = 0 ∨ role = 1 ∨ role = 2 → ¬InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole

intros role r args s trace ending s′ Hrole Hcall

role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
⊢
False

destruct InterpLocale.setlocale_invocation_ _ _ _ _ _ _ _ _ _ _ _ _ Hcall as _ & _ & born & He & Hpost

role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
born :
listZ
Hpost :
→
born = [ ] ∧ locale_caller_memory = locale_caller_memory ∧ locale_caller_endpointrole = locale_before ∧ ∃category : Z p : ptr, WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namelocale_before category
⊢
False

assert born = [ ] as →

2 open

role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
born :
listZ
Hpost :
→
born = [ ] ∧ locale_caller_memory = locale_caller_memory ∧ locale_caller_endpointrole = locale_before ∧ ∃category : Z p : ptr, WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namelocale_before category
⊢
born = [ ]
focused goal
role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
Hpost :
→
[ ] = [ ] ∧ locale_caller_memory = locale_caller_memory ∧ locale_caller_endpointrole = locale_before ∧ ∃category : Z p : ptr, WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namelocale_before category
⊢
False

{clear - He

2 open

⊢
born = [ ]
deferred goal
role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
Hpost :
→
[ ] = [ ] ∧ locale_caller_memory = locale_caller_memory ∧ locale_caller_endpointrole = locale_before ∧ ∃category : Z p : ptr, WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namelocale_before category
⊢
False

induction He ; reflexivity | exact IHHe |

2 open

m :
born :
listZ
align, size, base :
Z
m′ :
born′ :
listZ
H :
locale_queryWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = false ∧ False
H0 :
0 ≤ size ≤ max_allocation_size
H1 :
InterpRuntime.allocs heap_reqalign size = Somebase, s1
He :
InterpLocale.E.effectslocale_sourcesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_caller_memory locale_before locale_writesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_before locale_releasesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_before λ_ _ : Z ⇒ locale_queryWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = false ∧ False s1 allocatedm heap_reqalign size base base :: born s′ m′ born′
IHHe :
born′ = base :: born
⊢
born′ = born
deferred goal
role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
Hpost :
→
[ ] = [ ] ∧ locale_caller_memory = locale_caller_memory ∧ locale_caller_endpointrole = locale_before ∧ ∃category : Z p : ptr, WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namelocale_before category
⊢
False

destruct H as _ Hfalse

2 open

m :
born :
listZ
align, size, base :
Z
m′ :
born′ :
listZ
Hfalse :
False
H0 :
0 ≤ size ≤ max_allocation_size
H1 :
InterpRuntime.allocs heap_reqalign size = Somebase, s1
He :
InterpLocale.E.effectslocale_sourcesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_caller_memory locale_before locale_writesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_before locale_releasesWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 locale_before λ_ _ : Z ⇒ locale_queryWInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = false ∧ False s1 allocatedm heap_reqalign size base base :: born s′ m′ born′
IHHe :
born′ = base :: born
⊢
born′ = born
deferred goal
role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
Hpost :
→
[ ] = [ ] ∧ locale_caller_memory = locale_caller_memory ∧ locale_caller_endpointrole = locale_before ∧ ∃category : Z p : ptr, WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namelocale_before category
⊢
False

contradiction

deferred goal
role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
Hpost :
→
[ ] = [ ] ∧ locale_caller_memory = locale_caller_memory ∧ locale_caller_endpointrole = locale_before ∧ ∃category : Z p : ptr, WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 = WIntcategory; WPtrp ∧ ending = CallReturnWPtrlocale_namelocale_before category
⊢
False

cbn [ locale_query ptr_addr Z.eqb ] in Hpost

role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
⊢
False

destruct Hpost as _ & Hd & _

role :
Z
args :
listarg
trace :
listevent
ending :
Hrole :
role = 0 ∨ role = 1 ∨ role = 2
Hcall :
InterpLocale.E.invokesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ False r args WInt6; WPtrptr_addr ≔ 5120; ptr_cap ≔ Obj5120 s locale_caller_memory locale_before trace ending s′ locale_caller_memory locale_caller_endpointrole
⊢
False

exact locale_no_caller_endpointrole Hrole Hd

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros role r args s trace ending s′ Hrole Hcall
destruct InterpLocale.setlocale_invocation_ _ _ _ _ _ _ _ _ _ _ _ _ Hcall as _ & _ & born & He & Hpost
assert born = [ ] as →
{clear - He
induction He ; reflexivity | exact IHHe |
destruct H as _ Hfalse
contradiction
cbn [ locale_query ptr_addr Z.eqb ] in Hpost
destruct Hpost as _ & Hd & _
exact locale_no_caller_endpointrole Hrole Hd

Born allocation authority permits interior name pointers without aligning their character addresses or inventing old-object authority.

739Example locale_fresh_interior_retained: ∀base, locale_retained_caplocale_before base ptr_capmkPtrbase + 1 Objbase ∧ locale_retained_caplocale_before base ptr_capmkPtrbase + 3 Robase
Explore proof 2 tactics

Initial goal

⊢
∀base : Z, locale_retained_caplocale_before base ptr_capptr_addr ≔ base + 1; ptr_cap ≔ Objbase ∧ locale_retained_caplocale_before base ptr_capptr_addr ≔ base + 3; ptr_cap ≔ Robase

intros base

base :
Z

split ; left ; exists base ; simpl ; auto

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
intros base
split ; left ; exists base ; simpl ; auto

Model access at address zero can be readable, but a current locale name there is independently rejected as NULL.

746Example locale_zero_name_rejected: let m ≔ mkMemλ_ ⇒ 0 mkRegion0 1 GlobalData Live λ_ ⇒ CNone in let w ≔ mkLocaleWorld0 λ_ ⇒ mkPtr0 Obj0 λ_ ⇒ [ ] TAtom"C" [ ] [ ] [ ] in c_stringm mkPtr0 Obj0 [ ] ∧ ¬locale_readyλ_ _ ⇒ True m w
Explore proof 3 tactics

Initial goal

⊢
let m ≔ m_bytes ≔ λ_ : Z ⇒ 0; m_regions ≔ r_base ≔ 0; r_end ≔ 1; r_kind ≔ GlobalData; r_life ≔ Live; m_aux ≔ λ_ : Z ⇒ CNone in
let w ≔ locale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 0; ptr_cap ≔ Obj0; locale_text ≔ λ_ : Z ⇒ [ ]; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] in
c_stringm ptr_addr ≔ 0; ptr_cap ≔ Obj0 [ ] ∧ ¬locale_readyλ_ : mem _ : locale_world ⇒ True m w

split ; vm_compute ; repeat split ; congruence |

⊢
¬locale_readyλ_ : mem _ : locale_world ⇒ True m_bytes ≔ λ_ : Z ⇒ 0; m_regions ≔ r_base ≔ 0; r_end ≔ 1; r_kind ≔ GlobalData; r_life ≔ Live; m_aux ≔ λ_ : Z ⇒ CNone locale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 0; ptr_cap ≔ Obj0; locale_text ≔ λ_ : Z ⇒ [ ]; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ]

intros _ & _ & Hnames & _

Hnames :
∀category : Z, Incategory locale_categories → ptr_addrlocale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 0; ptr_cap ≔ Obj0; locale_text ≔ λ_ : Z ⇒ [ ]; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category ≠ 0 ∧ c_stringm_bytes ≔ λ_ : Z ⇒ 0; m_regions ≔ r_base ≔ 0; r_end ≔ 1; r_kind ≔ GlobalData; r_life ≔ Live; m_aux ≔ λ_ : Z ⇒ CNone locale_namelocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 0; ptr_cap ≔ Obj0; locale_text ≔ λ_ : Z ⇒ [ ]; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category locale_textlocale_epoch ≔ 0; locale_name ≔ λ_ : Z ⇒ ptr_addr ≔ 0; ptr_cap ≔ Obj0; locale_text ≔ λ_ : Z ⇒ [ ]; locale_codec ≔ TAtom"C"; locale_reads ≔ [ ]; locale_roots ≔ [ ]; locale_owned ≔ [ ] category
⊢
False

exact proj1Hnames0 or_introleq_refl eq_refl

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
split ; vm_compute ; repeat split ; congruence |
intros _ & _ & Hnames & _
exact proj1Hnames0 or_introleq_refl eq_refl

A real runtime refusal is a different invocation from a NULL return; the permitted request is witnessed, not inferred from admission.

Explore proof 26 tactics

Initial goal

eapply InterpLocale.E.invoke_resource with born := [ ]

5 open

⊢
contract_abisetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 CVoid locale_call_args
focused goal
⊢
contract_presetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 WInt6; WPtrhello_ptr locale_fixture locale_before
focused goal
focused goal
focused goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

–split ; left ; reflexivity |

5 open

⊢
∃category name : value, locale_call_args = ArgW category; ArgP name
deferred goal
⊢
contract_presetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 WInt6; WPtrhello_ptr locale_fixture locale_before
deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

eexists ; eexists ; reflexivity

4 open

deferred goal
⊢
contract_presetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 WInt6; WPtrhello_ptr locale_fixture locale_before
deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

–split ; exact proj1locale_fixture_ready |

4 open

⊢
∃category : Z p : ptr, WInt6; WPtrhello_ptr = WIntcategory; WPtrp ∧ Incategory locale_categories ∧ ptr_addrp = 0 ∨ ∃bytes : listZ, c_stringlocale_fixture p bytes
deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

exists 6, hello_ptr

4 open

⊢
deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

split ; reflexivity |

4 open

⊢
In6 locale_categories ∧ ptr_addrhello_ptr = 0 ∨ ∃bytes : listZ, c_stringlocale_fixture hello_ptr bytes
deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

split ; vm_compute ; tauto |

4 open

⊢
ptr_addrhello_ptr = 0 ∨ ∃bytes : listZ, c_stringlocale_fixture hello_ptr bytes
deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

right

4 open

⊢
∃bytes : listZ, c_stringlocale_fixture hello_ptr bytes
deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

exists hello_bytes

4 open

deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

vm_compute

4 open

⊢
Someok = Someok ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 104 = 104 ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 101 = 101 ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 108 = 108 ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 108 = 108 ∧ Datatypes.Lt = Datatypes.Lt ∧ Datatypes.Lt = Datatypes.Lt ∧ 111 = 111 ∧ 0 = 0
deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

repeat split ; congruence

3 open

deferred goal
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

–split ; constructor |

3 open

⊢
contract_prefixsetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 WInt6; WPtrhello_ptr locale_fixture locale_before [ ] [ ] locale_fixture locale_before
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

split ; reflexivity |

3 open

deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

split ; exact proj1locale_fixture_ready |

3 open

deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

split ; eapply locale_delegates_refl ; exact proj1locale_fixture_ready |

3 open

deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

exists 6, hello_ptr

3 open

deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

split ; reflexivity |

3 open

deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

left

3 open

deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

apply locale_unchanged_refl

2 open

deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

–eapply InterpLocale.E.failure_oom with align := 16 size := 32

4 open

⊢
contract_requestssetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 WInt6; WPtrhello_ptr locale_fixture locale_before 16 32
focused goal
⊢
0 ≤ 32 ≤ max_allocation_size
focused goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

+repeat split ; reflexivity

3 open

deferred goal
⊢
0 ≤ 32 ≤ max_allocation_size
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

+unfold max_allocation_size

3 open

⊢
0 ≤ 32 ≤ 2 ^ 48 − 1
deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

lia

2 open

deferred goal
deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

+reflexivity

deferred goal
⊢
contract_resourcesetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world align size : Z ⇒ align = 16 ∧ size = 32 OutOfMemory

–left

reflexivity

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
eapply InterpLocale.E.invoke_resource with born := [ ]
–split ; left ; reflexivity |
eexists ; eexists ; reflexivity
–split ; exact proj1locale_fixture_ready |
exists 6, hello_ptr
split ; reflexivity |
split ; vm_compute ; tauto |
right
vm_compute
repeat split ; congruence
–split ; constructor |
split ; reflexivity |
split ; exact proj1locale_fixture_ready |
split ; eapply locale_delegates_refl ; exact proj1locale_fixture_ready |
exists 6, hello_ptr
split ; reflexivity |
left
–eapply InterpLocale.E.failure_oom with align := 16 size := 32
+repeat split ; reflexivity
+reflexivity
–left
reflexivity

Invalid categories and ABI classes are not libc refusals. Query permissions and requests stay empty even under a broad setter policy.

780Example locale_query_permissions_and_bad_abi: locale_writesWInt0; WPtrmkPtr0 CNone locale_before = [ ] ∧ locale_releasesWInt0; WPtrmkPtr0 CNone locale_before = [ ] ∧ ∀align size, ¬contract_requestssetlocale_contractλ_ _ ⇒ True λ_ _ _ _ _ ⇒ True WInt0; WPtrmkPtr0 CNone locale_fixture locale_before align size ∧ ¬setlocale_abiCResultTAtom"bad" W locale_call_args ∧ ¬setlocale_preλ_ _ ⇒ True WInt13; WPtrmkPtr0 CNone locale_fixture locale_before
Explore proof 9 tactics

Initial goal

⊢
locale_writesWInt0; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone locale_before = [ ] ∧ locale_releasesWInt0; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone locale_before = [ ] ∧ ∀align size : Z, ¬contract_requestssetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ True WInt0; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone locale_fixture locale_before align size ∧ ¬setlocale_abiCResultTAtom"bad" W locale_call_args ∧ ¬setlocale_preλ_ : mem _ : locale_world ⇒ True WInt13; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone locale_fixture locale_before

split ; reflexivity |

⊢
locale_releasesWInt0; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone locale_before = [ ] ∧ ∀align size : Z, ¬contract_requestssetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ True WInt0; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone locale_fixture locale_before align size ∧ ¬setlocale_abiCResultTAtom"bad" W locale_call_args ∧ ¬setlocale_preλ_ : mem _ : locale_world ⇒ True WInt13; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone locale_fixture locale_before

split ; reflexivity |

⊢
∀align size : Z, ¬contract_requestssetlocale_contractλ_ : mem _ : locale_world ⇒ True λ_ : listword _ : mem _ : locale_world _ _ : Z ⇒ True WInt0; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone locale_fixture locale_before align size ∧ ¬setlocale_abiCResultTAtom"bad" W locale_call_args ∧ ¬setlocale_preλ_ : mem _ : locale_world ⇒ True WInt13; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone locale_fixture locale_before

split ; intros ? ? H _ ; discriminate H |

split

2 open

focused goal

–intros H | d & H _ ; discriminate H

deferred goal

–intros _ & category & p & Hxs & Hcat & _

category :
Z
p :
Hxs :
WInt13; WPtrptr_addr ≔ 0; ptr_cap ≔ CNone = WIntcategory; WPtrp
Hcat :
⊢
False

injection Hxs as ← Hp

p :
Hp :
ptr_addr ≔ 0; ptr_cap ≔ CNone = p
⊢
False

vm_compute in Hcat

p :
Hp :
ptr_addr ≔ 0; ptr_cap ≔ CNone = p
Hcat :
0 = 13 ∨ 1 = 13 ∨ 2 = 13 ∨ 3 = 13 ∨ 4 = 13 ∨ 5 = 13 ∨ 6 = 13 ∨ 7 = 13 ∨ 8 = 13 ∨ 9 = 13 ∨ 10 = 13 ∨ 11 = 13 ∨ 12 = 13 ∨ False
⊢
False

intuition discriminate

No remaining goals.

Qed

✓ Proof checked and closed by Rocq.

Source script
split ; reflexivity |
split ; reflexivity |
split ; intros ? ? H _ ; discriminate H |
split
–intros H | d & H _ ; discriminate H
–intros _ & category & p & Hxs & Hcat & _
injection Hxs as ← Hp
vm_compute in Hcat
intuition discriminate