| ⊦ IOAut?(IOAut(lstart, lstep, lext)) ∧ IOAut?(IOAut(rstart, rstep, rext)) ∧ Πhok(lext, rext, lren, rren, hideext) → IOAut?(Πh(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren, hideext)) |
IOAut?(IOAut(lstart, lstep, lext)), IOAut?(IOAut(rstart, rstep, rext)), Πhok(lext, rext, lren, rren, hideext), ¬ IOAut?(Πh(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren, hideext)) ⊦
| IOAut?(IOAut(lstart, lstep, lext)), IOAut?(IOAut(rstart, rstep, rext)), Πhok(lext, rext, lren, rren, hideext), ¬ IOAut?(Πh(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren, hideext)) ⊦ |
IOAut?(IOAut(rstart, rstep, rext)), IOAut?(IOAut(lstart, lstep, lext)), inj(lren), inj(rren), oinj(hideext), osurj(hideext), sharingok(lext, rext, lren, rren), surj(lren, rren), ¬ IOAut?(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Πh(lext, rext, lren, rren, hideext))), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); hidingproduct-def: ⊦ Πh(IOAut(lstart, lstep, lext), IOAut(rstart, rstep, rext), lren, rren, hideext) = IOAut (Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Πh(lext, rext, lren, rren, hideext));
| IOAut?(IOAut(rstart, rstep, rext)), IOAut?(IOAut(lstart, lstep, lext)), inj(lren), inj(rren), oinj(hideext), osurj(hideext), sharingok(lext, rext, lren, rren), surj(lren, rren), ¬ IOAut?(IOAut(Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Πh(lext, rext, lren, rren, hideext))), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext))
IOAut?(IOAut(lstart, lstep, lext)), IOAut?(IOAut(rstart, rstep, rext)), inj(rren), inj(lren), oinj(hideext), osurj(hideext), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ s. ¬(Π(lstart, rstart)(s) ∧ oinj(Πh(lext, rext, lren, rren, hideext))) ⊦
Used terms: Π(lstart, rstart), Π(lstep, rstep, lren, rren, lext, rext), Πh(lext, rext, lren, rren, hideext)
| ⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext)) |
| IOAut?(IOAut(lstart, lstep, lext)), IOAut?(IOAut(rstart, rstep, rext)), inj(rren), inj(lren), oinj(hideext), osurj(hideext), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ s. ¬(Π(lstart, rstart)(s) ∧ oinj(Πh(lext, rext, lren, rren, hideext))) ⊦ |
IOAut?(IOAut(rstart, rstep, rext)), IOAut?(IOAut(lstart, lstep, lext)), inj(lren), inj(rren), oinj(hideext), osurj(hideext), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦
| IOAut?(IOAut(rstart, rstep, rext)), IOAut?(IOAut(lstart, lstep, lext)), inj(lren), inj(rren), oinj(hideext), osurj(hideext), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦ |
⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext))
IOAut?(IOAut(lstart, lstep, lext)), inj(rren), inj(lren), oinj(hideext), osurj(hideext), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∃ s. rstart(s) ∧ oinj(rext), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦
Used terms: rstart, rstep, rext
| ⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext)) |
| IOAut?(IOAut(lstart, lstep, lext)), inj(rren), inj(lren), oinj(hideext), osurj(hideext), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∃ s. rstart(s) ∧ oinj(rext), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦ |
IOAut?(IOAut(lstart, lstep, lext)), inj(lren), inj(rren), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦
| IOAut?(IOAut(lstart, lstep, lext)), inj(lren), inj(rren), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦ |
⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext))
inj(rren), inj(lren), oinj(hideext), oinj(rext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∃ s. lstart(s) ∧ oinj(lext), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦
Used terms: lstart, lstep, lext
| ⊦ IOAut?(IOAut(start, step, ext)) ↔ (∃ s. start(s) ∧ oinj(ext)) |
| inj(rren), inj(lren), oinj(hideext), oinj(rext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∃ s. lstart(s) ∧ oinj(lext), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦ |
inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦
| inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), (∀ s. ¬ Π(lstart, rstart)(s)) ∨ ¬ oinj(Πh(lext, rext, lren, rren, hideext)) ⊦ |
inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ s. ¬ Π(lstart, rstart)(s) ⊦
inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ¬ oinj(Πh(lext, rext, lren, rren, hideext)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
| inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ s. ¬ Π(lstart, rstart)(s) ⊦ |
Used simplifier rules: lrstart-def: ⊦ Π(lstart, rstart)((ls, rs)) ↔ lstart(ls) ∧ rstart(rs); Used terms: (ls, rs)
| inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ¬ oinj(Πh(lext, rext, lren, rren, hideext)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2)
inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∃ pa, pa0. ¬(Πh(lext, rext, lren, rren, hideext)(pa) ≠ None ∧ Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0) → pa = pa0) ⊦
Used terms: Πh(lext, rext, lren, rren, hideext)
| ⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2) |
| inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∃ pa, pa0. ¬(Πh(lext, rext, lren, rren, hideext)(pa) ≠ None ∧ Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0) → pa = pa0) ⊦ |
Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
| Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
⊦ Πok(lext, rext, lren, rren) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren)
Πok(lext, rext, lren, rren) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren), Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used terms: lext, rext, lren, rren
| ⊦ Πok(lext, rext, lren, rren) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) |
| Πok(lext, rext, lren, rren) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren), Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
| Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
⊦ surj(lren, rren) ↔ (∀ pa. (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra)))
Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ pa. (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra)) ⊦
Used terms: lren, rren
| ⊦ surj(lren, rren) ↔ (∀ pa. (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra))) |
| Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ pa. (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra)) ⊦ |
Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ pa. (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra)) ⊦
Used terms: pa
| Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ pa. (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra)) ⊦ |
Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ pa. (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra)), pa = lren(la) ∨ pa = rren(ra) ⊦
| Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ pa. (∃ la. pa = lren(la)) ∨ (∃ ra. pa = rren(ra)), pa = lren(la) ∨ pa = rren(ra) ⊦ |
Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa = lren(la) ∨ pa = rren(ra), (∃ la. pa0 = lren(la)) ∨ (∃ ra. pa0 = rren(ra)) ⊦
Used terms: pa0
| Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa = lren(la) ∨ pa = rren(ra), (∃ la. pa0 = lren(la)) ∨ (∃ ra. pa0 = rren(ra)) ⊦ |
Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa = lren(la) ∨ pa = rren(ra), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
| Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa = lren(la) ∨ pa = rren(ra), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
⊦ sharingok(lext, rext, lren, rren) ↔ (∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)))
Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0), pa = lren(la) ∨ pa = rren(ra) ⊦
Used terms: lext, rext, lren, rren
| ⊦ sharingok(lext, rext, lren, rren) ↔ (∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra))) |
| Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0), pa = lren(la) ∨ pa = rren(ra) ⊦ |
pa = lren(la), Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
pa = rren(ra), Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
| pa = lren(la), Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
Πh(lext, rext, lren, rren, hideext)(lren(la)) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
| Πh(lext, rext, lren, rren, hideext)(lren(la)) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(lren(la)) = ((hideext o lext))(la)
Πh(lext, rext, lren, rren, hideext)(lren(la)) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ¬ Πhok(lext, rext, lren, rren, hideext), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
((hideext o lext))(la) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
Used terms: rext, lren, lext, rren, la, hideext
| ⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(lren(la)) = ((hideext o lext))(la) |
| Πh(lext, rext, lren, rren, hideext)(lren(la)) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ¬ Πhok(lext, rext, lren, rren, hideext), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
Πh(lext, rext, lren, rren, hideext)(lren(la)) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren)
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)));
| Πh(lext, rext, lren, rren, hideext)(lren(la)) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) |
⊦ Πok(lext, rext, lren, rren) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren)
Used terms: lext, rext, lren, rren
| ⊦ Πok(lext, rext, lren, rren) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) |
| ((hideext o lext))(la) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
(lext(la) ≠ None ⊃ hideext(lext(la).get);None) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); ⊦ ((og o of))(a) = (of(a) ≠ None ⊃ og(of(a).get);None); (s)
| (lext(la) ≠ None ⊃ hideext(lext(la).get);None) = Πh(lext, rext, lren, rren, hideext)(pa0), lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
hideext(lext(la).get) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) ≠ None, lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
| hideext(lext(la).get) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) ≠ None, lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) = Some(e0), lext(la) ≠ None, lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
Used simplifier rules: ⊦ opt ≠ None → (get = opt.get ↔ opt = Some(get)); (elim) Used terms: lext(la), e0
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) = Some(e0), lext(la) ≠ None, lren(la) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ pa0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
Used simplifier rules: ⊦ Some(a) ≠ None; (s)
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ pa0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) = Some(e0), pa0 = lren(la0), hideext(e0) ≠ None, lren(la) ≠ pa0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) = Some(e0), pa0 = rren(ra0), hideext(e0) ≠ None, lren(la) ≠ pa0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) = Some(e0), pa0 = lren(la0), hideext(e0) ≠ None, lren(la) ≠ pa0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(lren(la0)), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ inj(f) → (f(a1) = f(a2) ↔ a1 = a2); (s)
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(lren(la0)), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(lren(la)) = ((hideext o lext))(la)
hideext(e0) = ((hideext o lext))(la0), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); Used terms: rext, lren, lext, rren, la0, hideext
| ⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(lren(la)) = ((hideext o lext))(la) |
| hideext(e0) = ((hideext o lext))(la0), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
hideext(e0) = (lext(la0) ≠ None ⊃ hideext(lext(la0).get);None), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); ⊦ ((og o of))(a) = (of(a) ≠ None ⊃ og(of(a).get);None); (s)
| hideext(e0) = (lext(la0) ≠ None ⊃ hideext(lext(la0).get);None), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
hideext(e0) = hideext(lext(la0).get), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, lext(la0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
| hideext(e0) = hideext(lext(la0).get), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, lext(la0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la) = Some(lext(la0).get), hideext(lext(la0).get) ≠ None, la ≠ la0, lext(la0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ oinj(of) ∧ of(a1) ≠ None → (of(a1) = of(a2) ↔ a1 = a2); (s)
| lext(la) = Some(lext(la0).get), hideext(lext(la0).get) ≠ None, la ≠ la0, lext(la0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la) = Some(e0), lext(la0) = Some(e0), hideext(e0) ≠ None, la ≠ la0, lext(la0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ opt ≠ None → (get = opt.get ↔ opt = Some(get)); (elim) Used terms: lext(la0), e0
| lext(la) = Some(e0), lext(la0) = Some(e0), hideext(e0) ≠ None, la ≠ la0, lext(la0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la) = Some(e0), lext(la0) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ Some(a) ≠ None; (s)
| lext(la) = Some(e0), lext(la0) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2)
lext(la0) = Some(e0), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(lren), inj(rren), lstart(ls), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, la0. lext(la) ≠ None ∧ lext(la) = lext(la0) → la = la0 ⊦
Used terms: lext
| ⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2) |
| lext(la0) = Some(e0), lext(la) = Some(e0), hideext(e0) ≠ None, la ≠ la0, inj(lren), inj(rren), lstart(ls), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, la0. lext(la) ≠ None ∧ lext(la) = lext(la0) → la = la0 ⊦ |
Used simplifier rules: ⊦ Some(a) ≠ None; (s) Used terms: la, la0
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), lext(la) = Some(e0), pa0 = rren(ra0), hideext(e0) ≠ None, lren(la) ≠ pa0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(rren(ra0)), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(rren(ra0)), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(rren(ra)) = ((hideext o rext))(ra)
hideext(e0) = ((hideext o rext))(ra0), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); Used terms: rext, ra0, lren, lext, rren, hideext
| ⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(rren(ra)) = ((hideext o rext))(ra) |
| hideext(e0) = ((hideext o rext))(ra0), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
hideext(e0) = (rext(ra0) ≠ None ⊃ hideext(rext(ra0).get);None), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); ⊦ ((og o of))(a) = (of(a) ≠ None ⊃ og(of(a).get);None); (s)
| hideext(e0) = (rext(ra0) ≠ None ⊃ hideext(rext(ra0).get);None), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
hideext(e0) = hideext(rext(ra0).get), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), rext(ra0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
| hideext(e0) = hideext(rext(ra0).get), lext(la) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), rext(ra0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la) = Some(rext(ra0).get), hideext(rext(ra0).get) ≠ None, lren(la) ≠ rren(ra0), rext(ra0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ oinj(of) ∧ of(a1) ≠ None → (of(a1) = of(a2) ↔ a1 = a2); (s)
| lext(la) = Some(rext(ra0).get), hideext(rext(ra0).get) ≠ None, lren(la) ≠ rren(ra0), rext(ra0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), rext(ra0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ opt ≠ None → (get = opt.get ↔ opt = Some(get)); (elim) Used terms: rext(ra0), e0
| lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), rext(ra0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ Some(a) ≠ None; (s)
| lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la) = rren(ra0) → lext(la) ≠ None ∧ rext(ra0) ≠ None ∧ lext(la) = rext(ra0), ¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra0)) ∧ lext(la) ≠ None ∧ rext(ra0) ≠ None → lext(la) ≠ rext(ra0), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used terms: la, ra0
| lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la) = rren(ra0) → lext(la) ≠ None ∧ rext(ra0) ≠ None ∧ lext(la) = rext(ra0), ¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra0)) ∧ lext(la) ≠ None ∧ rext(ra0) ≠ None → lext(la) ≠ rext(ra0), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ ¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra0))
Used simplifier rules: ⊦ Some(a) ≠ None; (s)
| lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ ¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra0)) |
lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), cod(rren)(lren(la)), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), cod(lren)(rren(ra0)), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
| lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), cod(rren)(lren(la)), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la) = Some(e0), rext(ra0) = Some(e0), rren(ra) = lren(la), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ cod(f)(b) ↔ (∃ a. f(a) = b); (as)
| lext(la) = Some(e0), rext(ra0) = Some(e0), rren(ra) = lren(la), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la) = Some(e0), rext(ra0) = Some(e0), rren(ra) = lren(la), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra), ¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used terms: la, ra
| lext(la) = Some(e0), rext(ra0) = Some(e0), rren(ra) = lren(la), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra), ¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la) = Some(e0), rext(ra) = Some(e0), rext(ra0) = Some(e0), rren(ra) = lren(la), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ cod(f)(f(a)); (s) ⊦ Some(a) ≠ None; (s)
| lext(la) = Some(e0), rext(ra) = Some(e0), rext(ra0) = Some(e0), rren(ra) = lren(la), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2)
lext(la) = Some(e0), rext(ra0) = Some(e0), rext(ra) = Some(e0), rren(ra) = lren(la), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ ra, ra0. rext(ra) ≠ None ∧ rext(ra) = rext(ra0) → ra = ra0 ⊦
Used terms: rext
| ⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2) |
| lext(la) = Some(e0), rext(ra0) = Some(e0), rext(ra) = Some(e0), rren(ra) = lren(la), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ ra, ra0. rext(ra) ≠ None ∧ rext(ra) = rext(ra0) → ra = ra0 ⊦ |
Used simplifier rules: ⊦ Some(a) ≠ None; (s) Used terms: ra, ra0
| lext(la) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), cod(lren)(rren(ra0)), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la) = Some(e0), lren(la0) = rren(ra0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ cod(f)(b) ↔ (∃ a. f(a) = b); (as)
| lext(la) = Some(e0), lren(la0) = rren(ra0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la) = Some(e0), lren(la0) = rren(ra0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la0) = rren(ra0) → lext(la0) ≠ None ∧ rext(ra0) ≠ None ∧ lext(la0) = rext(ra0), ¬ cod(rren)(lren(la0)) ∧ ¬ cod(lren)(rren(ra0)) ∧ lext(la0) ≠ None ∧ rext(ra0) ≠ None → lext(la0) ≠ rext(ra0), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used terms: la0, ra0
| lext(la) = Some(e0), lren(la0) = rren(ra0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la0) = rren(ra0) → lext(la0) ≠ None ∧ rext(ra0) ≠ None ∧ lext(la0) = rext(ra0), ¬ cod(rren)(lren(la0)) ∧ ¬ cod(lren)(rren(ra0)) ∧ lext(la0) ≠ None ∧ rext(ra0) ≠ None → lext(la0) ≠ rext(ra0), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la0) = Some(e0), lext(la) = Some(e0), lren(la0) = rren(ra0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ cod(f)(f(a)); (s) ⊦ Some(a) ≠ None; (s)
| lext(la0) = Some(e0), lext(la) = Some(e0), lren(la0) = rren(ra0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2)
lext(la) = Some(e0), lext(la0) = Some(e0), lren(la0) = rren(ra0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, la0. lext(la) ≠ None ∧ lext(la) = lext(la0) → la = la0 ⊦
Used terms: lext
| ⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2) |
| lext(la) = Some(e0), lext(la0) = Some(e0), lren(la0) = rren(ra0), rext(ra0) = Some(e0), hideext(e0) ≠ None, lren(la) ≠ rren(ra0), inj(lren), inj(rren), lstart(ls), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, la0. lext(la) ≠ None ∧ lext(la) = lext(la0) → la = la0 ⊦ |
Used simplifier rules: ⊦ Some(a) ≠ None; (s) Used terms: la, la0
| pa = rren(ra), Πh(lext, rext, lren, rren, hideext)(pa) = Πh(lext, rext, lren, rren, hideext)(pa0), pa ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
Πh(lext, rext, lren, rren, hideext)(rren(ra)) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
| Πh(lext, rext, lren, rren, hideext)(rren(ra)) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(rren(ra)) = ((hideext o rext))(ra)
Πh(lext, rext, lren, rren, hideext)(rren(ra)) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ¬ Πhok(lext, rext, lren, rren, hideext), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
((hideext o rext))(ra) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
Used terms: rext, ra, lren, lext, rren, hideext
| ⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(rren(ra)) = ((hideext o rext))(ra) |
| Πh(lext, rext, lren, rren, hideext)(rren(ra)) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ¬ Πhok(lext, rext, lren, rren, hideext), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
Πh(lext, rext, lren, rren, hideext)(rren(ra)) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren)
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)));
| Πh(lext, rext, lren, rren, hideext)(rren(ra)) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) |
⊦ Πok(lext, rext, lren, rren) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren)
Used terms: lext, rext, lren, rren
| ⊦ Πok(lext, rext, lren, rren) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) |
| ((hideext o rext))(ra) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
(rext(ra) ≠ None ⊃ hideext(rext(ra).get);None) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); ⊦ ((og o of))(a) = (of(a) ≠ None ⊃ og(of(a).get);None); (s)
| (rext(ra) ≠ None ⊃ hideext(rext(ra).get);None) = Πh(lext, rext, lren, rren, hideext)(pa0), rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
hideext(rext(ra).get) = Πh(lext, rext, lren, rren, hideext)(pa0), rext(ra) ≠ None, rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
| hideext(rext(ra).get) = Πh(lext, rext, lren, rren, hideext)(pa0), rext(ra) ≠ None, rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), rext(ra) = Some(e0), rext(ra) ≠ None, rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
Used simplifier rules: ⊦ opt ≠ None → (get = opt.get ↔ opt = Some(get)); (elim) Used terms: rext(ra), e0
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), rext(ra) = Some(e0), rext(ra) ≠ None, rren(ra) ≠ pa0, Πh(lext, rext, lren, rren, hideext)(pa0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ pa0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦
Used simplifier rules: ⊦ Some(a) ≠ None; (s)
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ pa0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), pa0 = lren(la0) ∨ pa0 = rren(ra0) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), pa0 = lren(la0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ pa0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), pa0 = rren(ra0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ pa0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), pa0 = lren(la0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ pa0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(lren(la0)), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(lren(la0)), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(lren(la)) = ((hideext o lext))(la)
hideext(e0) = ((hideext o lext))(la0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); Used terms: rext, lren, lext, rren, la0, hideext
| ⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(lren(la)) = ((hideext o lext))(la) |
| hideext(e0) = ((hideext o lext))(la0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
hideext(e0) = (lext(la0) ≠ None ⊃ hideext(lext(la0).get);None), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); ⊦ ((og o of))(a) = (of(a) ≠ None ⊃ og(of(a).get);None); (s)
| hideext(e0) = (lext(la0) ≠ None ⊃ hideext(lext(la0).get);None), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
hideext(e0) = hideext(lext(la0).get), rext(ra) = Some(e0), hideext(e0) ≠ None, lext(la0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
| hideext(e0) = hideext(lext(la0).get), rext(ra) = Some(e0), hideext(e0) ≠ None, lext(la0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
rext(ra) = Some(lext(la0).get), hideext(lext(la0).get) ≠ None, lext(la0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ oinj(of) ∧ of(a1) ≠ None → (of(a1) = of(a2) ↔ a1 = a2); (s)
| rext(ra) = Some(lext(la0).get), hideext(lext(la0).get) ≠ None, lext(la0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, lext(la0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ opt ≠ None → (get = opt.get ↔ opt = Some(get)); (elim) Used terms: lext(la0), e0
| lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, lext(la0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ Some(a) ≠ None; (s)
| lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la0) = rren(ra) → lext(la0) ≠ None ∧ rext(ra) ≠ None ∧ lext(la0) = rext(ra), ¬ cod(rren)(lren(la0)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la0) ≠ None ∧ rext(ra) ≠ None → lext(la0) ≠ rext(ra), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used terms: la0, ra
| lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la0) = rren(ra) → lext(la0) ≠ None ∧ rext(ra) ≠ None ∧ lext(la0) = rext(ra), ¬ cod(rren)(lren(la0)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la0) ≠ None ∧ rext(ra) ≠ None → lext(la0) ≠ rext(ra), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ ¬ cod(rren)(lren(la0)) ∧ ¬ cod(lren)(rren(ra))
Used simplifier rules: ⊦ Some(a) ≠ None; (s)
| lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ ¬ cod(rren)(lren(la0)) ∧ ¬ cod(lren)(rren(ra)) |
lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), cod(rren)(lren(la0)), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), cod(lren)(rren(ra)), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
| lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), cod(rren)(lren(la0)), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la0) = Some(e0), rext(ra) = Some(e0), rren(ra0) = lren(la0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ cod(f)(b) ↔ (∃ a. f(a) = b); (as)
| lext(la0) = Some(e0), rext(ra) = Some(e0), rren(ra0) = lren(la0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la0) = Some(e0), rext(ra) = Some(e0), rren(ra0) = lren(la0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la0) = rren(ra0) → lext(la0) ≠ None ∧ rext(ra0) ≠ None ∧ lext(la0) = rext(ra0), ¬ cod(rren)(lren(la0)) ∧ ¬ cod(lren)(rren(ra0)) ∧ lext(la0) ≠ None ∧ rext(ra0) ≠ None → lext(la0) ≠ rext(ra0), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used terms: la0, ra0
| lext(la0) = Some(e0), rext(ra) = Some(e0), rren(ra0) = lren(la0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la0) = rren(ra0) → lext(la0) ≠ None ∧ rext(ra0) ≠ None ∧ lext(la0) = rext(ra0), ¬ cod(rren)(lren(la0)) ∧ ¬ cod(lren)(rren(ra0)) ∧ lext(la0) ≠ None ∧ rext(ra0) ≠ None → lext(la0) ≠ rext(ra0), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la0) = Some(e0), rext(ra0) = Some(e0), rext(ra) = Some(e0), rren(ra0) = lren(la0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ cod(f)(f(a)); (s) ⊦ Some(a) ≠ None; (s)
| lext(la0) = Some(e0), rext(ra0) = Some(e0), rext(ra) = Some(e0), rren(ra0) = lren(la0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2)
lext(la0) = Some(e0), rext(ra) = Some(e0), rext(ra0) = Some(e0), rren(ra0) = lren(la0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ ra, ra0. rext(ra) ≠ None ∧ rext(ra) = rext(ra0) → ra = ra0 ⊦
Used terms: rext
| ⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2) |
| lext(la0) = Some(e0), rext(ra) = Some(e0), rext(ra0) = Some(e0), rren(ra0) = lren(la0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ ra, ra0. rext(ra) ≠ None ∧ rext(ra) = rext(ra0) → ra = ra0 ⊦ |
Used simplifier rules: ⊦ Some(a) ≠ None; (s) Used terms: ra, ra0
| lext(la0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), cod(lren)(rren(ra)), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
lext(la0) = Some(e0), lren(la) = rren(ra), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ cod(f)(b) ↔ (∃ a. f(a) = b); (as)
| lext(la0) = Some(e0), lren(la) = rren(ra), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la0) = Some(e0), lren(la) = rren(ra), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra), ¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used terms: la, ra
| lext(la0) = Some(e0), lren(la) = rren(ra), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra), ¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
lext(la) = Some(e0), lext(la0) = Some(e0), lren(la) = rren(ra), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ cod(f)(f(a)); (s) ⊦ Some(a) ≠ None; (s)
| lext(la) = Some(e0), lext(la0) = Some(e0), lren(la) = rren(ra), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2)
lext(la0) = Some(e0), lext(la) = Some(e0), lren(la) = rren(ra), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, la0. lext(la) ≠ None ∧ lext(la) = lext(la0) → la = la0 ⊦
Used terms: lext
| ⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2) |
| lext(la0) = Some(e0), lext(la) = Some(e0), lren(la) = rren(ra), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ lren(la0), inj(lren), inj(rren), lstart(ls), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, la0. lext(la) ≠ None ∧ lext(la) = lext(la0) → la = la0 ⊦ |
Used simplifier rules: ⊦ Some(a) ≠ None; (s) Used terms: la, la0
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(pa0), pa0 = rren(ra0), rext(ra) = Some(e0), hideext(e0) ≠ None, rren(ra) ≠ pa0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
hideext(e0) = Πh(lext, rext, lren, rren, hideext)(rren(ra0)), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ inj(f) → (f(a1) = f(a2) ↔ a1 = a2); (s)
| hideext(e0) = Πh(lext, rext, lren, rren, hideext)(rren(ra0)), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(rren(ra)) = ((hideext o rext))(ra)
hideext(e0) = ((hideext o rext))(ra0), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); Used terms: rext, ra0, lren, lext, rren, hideext
| ⊦ Πhok(lext, rext, lren, rren, hideext) → Πh(lext, rext, lren, rren, hideext)(rren(ra)) = ((hideext o rext))(ra) |
| hideext(e0) = ((hideext o rext))(ra0), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πhok(lext, rext, lren, rren, hideext), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
hideext(e0) = (rext(ra0) ≠ None ⊃ hideext(rext(ra0).get);None), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: hidingproductok-def: ⊦ Πhok(lext, rext, lren, rren, hideext) ↔ inj(lren) ∧ inj(rren) ∧ surj(lren, rren) ∧ sharingok(lext, rext, lren, rren) ∧ hidingok(lext, rext, lren, rren, hideext); hidingok-def: ⊦ hidingok(lext, rext, lren, rren, hideext) ↔ oinj(hideext) ∧ osurj(hideext) ∧ (∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra))); ⊦ ((og o of))(a) = (of(a) ≠ None ⊃ og(of(a).get);None); (s)
| hideext(e0) = (rext(ra0) ≠ None ⊃ hideext(rext(ra0).get);None), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
hideext(e0) = hideext(rext(ra0).get), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, rext(ra0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
| hideext(e0) = hideext(rext(ra0).get), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, rext(ra0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
rext(ra) = Some(rext(ra0).get), hideext(rext(ra0).get) ≠ None, ra ≠ ra0, rext(ra0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦
Used simplifier rules: ⊦ oinj(of) ∧ of(a1) ≠ None → (of(a1) = of(a2) ↔ a1 = a2); (s)
| rext(ra) = Some(rext(ra0).get), hideext(rext(ra0).get) ≠ None, ra ≠ ra0, rext(ra0) ≠ None, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(rext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)) ⊦ |
rext(ra) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, rext(ra0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ opt ≠ None → (get = opt.get ↔ opt = Some(get)); (elim) Used terms: rext(ra0), e0
| rext(ra) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, rext(ra0) ≠ None, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
rext(ra) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦
Used simplifier rules: ⊦ Some(a) ≠ None; (s)
| rext(ra) = Some(e0), rext(ra0) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(rren), inj(lren), lstart(ls), oinj(hideext), oinj(rext), oinj(lext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)) ⊦ |
⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2)
rext(ra0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ ra, ra0. rext(ra) ≠ None ∧ rext(ra) = rext(ra0) → ra = ra0 ⊦
Used terms: rext
| ⊦ oinj(of) ↔ (∀ a1, a2. of(a1) ≠ None ∧ of(a1) = of(a2) → a1 = a2) |
| rext(ra0) = Some(e0), rext(ra) = Some(e0), hideext(e0) ≠ None, ra ≠ ra0, inj(lren), inj(rren), lstart(ls), oinj(lext), oinj(hideext), osurj(hideext), rstart(rs), sharingok(lext, rext, lren, rren), surj(lren, rren), Πok(lext, rext, lren, rren), ∀ la, ra. (lren(la) = rren(ra) → lext(la) ≠ None ∧ rext(ra) ≠ None ∧ lext(la) = rext(ra)) ∧ (¬ cod(rren)(lren(la)) ∧ ¬ cod(lren)(rren(ra)) ∧ lext(la) ≠ None ∧ rext(ra) ≠ None → lext(la) ≠ rext(ra)), ∀ e. hideext(e) = None ↔ (∃ la, ra. lren(la) = rren(ra) ∧ Some(e) = lext(la) ∧ Some(e) = rext(ra)), ∀ ra, ra0. rext(ra) ≠ None ∧ rext(ra) = rext(ra0) → ra = ra0 ⊦ |
Used simplifier rules: ⊦ Some(a) ≠ None; (s) Used terms: ra, ra0
The following image shows the proof tree of sequent calculus. The proved goal is at the bottom. You can click on the nodes to view additional rules. See here for details on colors in a proof tree.