@[reducible, inline]
Equations
Instances For
Equations
- FV.fv_getter getter = (GaudisCrypt.ProgramDenotation.get getter).range
Instances For
Equations
Instances For
def
FV.fv_reduce
{a : Type u_1}
{b : Type u_2}
(lens : GaudisCrypt.Lens a b)
(range : DetermFootprint b)
:
Equations
- FV.fv_reduce lens range = DetermFootprint.from {f : Function.End a | ∀ g ∈ range.updates, lens.liftFunction f * g = g * lens.liftFunction f}.centralizer
Instances For
def
FV.fv_extend
{a : Type u_1}
{b : Type u_2}
(lens : GaudisCrypt.Lens a b)
(range : DetermFootprint a)
:
Equations
- FV.fv_extend lens range = DetermFootprint.from (lens.liftFunction '' range.updates)
Instances For
Properties of fv_reduce / fv_extend needed for fv_proc_instantiate. #
These are stated as axioms for review. Once fv_reduce/fv_extend have real
definitions they should become theorems. Note: the proof of fv_proc_instantiate
needs no properties of fv_getter/fv_setter — they are used opaquely.
theorem
FV.fv_reduce_sup
{a : Type u_1}
{b : Type u_2}
(lens : GaudisCrypt.Lens a b)
(r₁ r₂ : DetermFootprint b)
:
theorem
FV.fv_extend_sup
[GaudisCrypt.ProgramSpec]
{a : Type u_1}
{b : Type u_2}
(lens : GaudisCrypt.Lens a b)
(r₁ r₂ : DetermFootprint a)
:
fv_extend distributes over joins.
theorem
FV.fv_extend_updates
[GaudisCrypt.ProgramSpec]
{a : Type u_1}
{b : Type u_2}
(lens : GaudisCrypt.Lens a b)
(range : DetermFootprint a)
:
theorem
FV.fv_reduce_extend
[GaudisCrypt.ProgramSpec]
{a : Type u_1}
{b : Type u_2}
(lens : GaudisCrypt.Lens a b)
(r : DetermFootprint a)
:
fv_reduce is a retraction of fv_extend: pushing a footprint forward along a
lens and pulling it back recovers it. (Only ≤ is used in the proof.)
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
noncomputable def
FV.fv
[GaudisCrypt.ProgramSpec]
{t : GaudisCrypt.ModuleTypeRep}
(m : GaudisCrypt.Module t)
:
Equations
Instances For
@[implicit_reducible]
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
FV.fvMexpr_upper_bound
[GaudisCrypt.ProgramSpec]
{t : GaudisCrypt.ModuleTypeRep}
{m : GaudisCrypt.ModuleExpression}
(h : m.HasType [] t)
:
theorem
FV.fv_app
[GaudisCrypt.ProgramSpec]
{A B : GaudisCrypt.ModuleTypeRep}
(a : GaudisCrypt.Module (A.arr B))
(b : GaudisCrypt.Module A)
:
theorem
FV.fv_pair
[GaudisCrypt.ProgramSpec]
{A B : GaudisCrypt.ModuleTypeRep}
(a : GaudisCrypt.Module A)
(b : GaudisCrypt.Module B)
:
theorem
FV.fv_fst
[GaudisCrypt.ProgramSpec]
{A B : GaudisCrypt.ModuleTypeRep}
(a : GaudisCrypt.Module (A.prod B))
:
theorem
FV.fv_snd
[GaudisCrypt.ProgramSpec]
{A B : GaudisCrypt.ModuleTypeRep}
(a : GaudisCrypt.Module (A.prod B))
:
@[simp]
theorem
FV.fv_unit
[GaudisCrypt.ProgramSpec]
(a : GaudisCrypt.Module GaudisCrypt.ModuleTypeRep.unit)
:
noncomputable def
FV.fv_proc
[GaudisCrypt.ProgramSpec]
{sig : GaudisCrypt.ProcedureSignature}
{holes : GaudisCrypt.HoleSigs}
(proc : GaudisCrypt.ProcedureWithHoles holes sig)
:
Equations
- FV.fv_proc proc = FV.fvInductiveFunctionGS.proc proc
Instances For
noncomputable def
FV.fv_stmt
[GaudisCrypt.ProgramSpec]
{s : Type}
{holes : GaudisCrypt.HoleSigs}
(stmt : GaudisCrypt.StmtWithHoles holes s)
:
Equations
- FV.fv_stmt stmt = FV.fvInductiveFunctionGS.stmt stmt