Newer
Older
// This file shows that coercions are transitive.
// We have approximately the following setup
//
// numfield
// / \
// / \
// / \
// numfield* real
// |
// |
// real*
//
// And we coerce an element (in [foox]) from [real*] to [numfield*].
personoj.lhol personoj.pvs_cert personoj.tuple personoj.logical personoj.eq;
require open personoj.coercions;
constant symbol numfield: Set;
constant symbol nz_numfield : El numfield → Prop;
symbol numfield* ≔ psub {numfield} nz_numfield;
constant symbol real_pred : El numfield → Prop;
symbol real ≔ psub {numfield} real_pred;
symbol nz_real : El real → Prop;
symbol real* ≔ psub {real} nz_real;
symbol foox : Π x: El real*, Prf (foo x)
begin admit; end;
symbol bar: El (σ (numfield && numfield*)) → Prop;
symbol barx : Π x: El real, Π y: El real*, Prf (bar (x ^^ y))